web-dev-qa-db-ja.com

大文字と小文字を区別せずにアルファベット順に並べ替える方法は?

私はこのコードを持っていますが、小文字でのみ機能します。大文字を無視してリストを並べ替えたい。

package sortarray.com;

import Java.util.ArrayList;
import Java.util.List;

import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.widget.TextView;

public class SortArray extends Activity {
    ArrayList<String[]> matchedFruits = new ArrayList<String[]>();
    TextView selection;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String fruits[] = new String[7];// Sorted array
        fruits[0] = "Apple";
        fruits[1] = "apricot";
        fruits[2] = "banana";
        fruits[3] = "mango";
        fruits[4] = "melon";
        fruits[5] = "pineapple";
        fruits[6] = "Peach";
        char currChar = fruits[0].charAt(0);// Get first char of first element

        boolean match = false;
        int len = fruits.length;
        List<String> tmp = new ArrayList<String>();

        for (int i = 1; i < len; i++) {
            Log.d("Comparing ", fruits[i].charAt(0) + "," + currChar);
            if (fruits[i].charAt(0) == currChar) {
                if (match == false)// new match?
                {
                    match = true;// Reset search
                    tmp.clear();// clear existing items
                    tmp.add(fruits[i - 1]);
                    Log.d("Started new list ", fruits[i - 1]);
                } else {
                    tmp.add(fruits[i - 1]);
                    Log.d("Added to list ", fruits[i - 1]);
                }
            } else {
                match = false;
                tmp.add(fruits[i - 1]);
                matchedFruits.add(tmp.toArray(new String[tmp.size()]));// add to
                                                                        // final
                                                                        // list
                Log.d("Finished a list ", fruits[i - 1]);
                tmp.clear();// clear existing items

            }
            currChar = fruits[i].charAt(0);

        }
        tmp.add(fruits[len - 1]);
        matchedFruits.add(tmp.toArray(new String[tmp.size()]));// add left over
                                                                // items
        printList();
    }

    void printList()
    {
    //Print the list 
        TextView selection = (TextView) findViewById(R.id.tv);
        String mssg="";
    for(int i=0;i<matchedFruits.size();i++)
    {
            String tmp2[]= matchedFruits.get(i);

            for (int j = 0; j < tmp2.length; j++) {
                //Log.d("Final list", "Array #" + i + "[" + j + "]," + tmp2[j]);
                mssg += tmp2[j].toString();

            }
            //selection.setText("\n");
            selection.setText(mssg);

    }
    }
}
44
user934357

以下に、プレーンJavaの最良の方法の例を示します。

import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.Comparator;
import Java.util.List;

public class Sorter {
    String fruits[] = new String[7];
    List<String> lst;

    Sorter() {
        lst = new ArrayList<String>();
        // initialise UNSORTED array
        fruits[0] = "Melon"; fruits[1] = "apricot"; fruits[2] = "Peach";
        fruits[3] = "mango"; fruits[4] = "Apple";   fruits[5] = "pineapple";
        fruits[6] = "banana";
    }

    public static void main(String[] args) {
        Sorter srt = new Sorter();
        srt.anyOldUnstaticMethod();

    }
    public void anyOldUnstaticMethod() {
        Collections.addAll(lst, fruits);
        System.out.println("Initial List");
        for (String s : lst)
            System.out.println(s);
        Collections.sort(lst);
        System.out.println("\nSorted List");
        for (String s : lst)
            System.out.println(s);
        Collections.sort(lst, new SortIgnoreCase());
        System.out.println("\nSorted Ignoring Case List");
        for (String s : lst)
            System.out.println(s);
    }

    public class SortIgnoreCase implements Comparator<Object> {
        public int compare(Object o1, Object o2) {
            String s1 = (String) o1;
            String s2 = (String) o2;
            return s1.toLowerCase().compareTo(s2.toLowerCase());
        }
    }
}
30
NickT
Collections.sort(listToSort, String.CASE_INSENSITIVE_ORDER);
140
guyblank

very何をしようとしているのか不明ですが、次のようにリストをソートできます。

List<String> fruits = new ArrayList<String>(7);

fruits.add("Pineapple");
fruits.add("Apple");
fruits.add("apricot");
fruits.add("Banana");
fruits.add("mango");
fruits.add("melon");        
fruits.add("Peach");

System.out.println("Unsorted: " + fruits);

Collections.sort(fruits, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {              
        return o1.compareToIgnoreCase(o2);
    }
});

System.out.println("Sorted: " + fruits);
39

Collections.sort()を使用すると、注文用のカスタムコンパレーターを渡すことができます。大文字と小文字を区別しない順序付けのために、StringクラスはCASE_INSENSITIVE_ORDERと呼ばれる静的な最終コンパレータを提供します。

あなたの場合、必要なのは次のとおりです:

Collections.sort(caps, String.CASE_INSENSITIVE_ORDER);
30
user4363171

Collat​​or を参照している人がいないとは信じられません。これらの回答のほとんどすべては、英語でのみ機能します。

ほとんどの場合、 辞書ベースの並べ替えのコレーター を使用する必要があります。

大文字と小文字を区別しないコレーターで英語を検索するには、次の手順を実行します。

Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
Collections.sort(listToSort, usCollator);
12
Adam Gent

コンパレータクラスSortIgnoreCaseが好きですが、これを使用していました

public class SortIgnoreCase implements Comparator<String> {
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2);    // Cleaner :)
    }
}
4
Java Devil

Java.text.Collator.getInstance()Collections.sortメソッドに渡します。大文字と小文字を区別せずにアルファベット順にソートします。

        ArrayList<String> myArray = new ArrayList<String>();
        myArray.add("zzz");
        myArray.add("xxx");
        myArray.add("Aaa");
        myArray.add("bb");
        myArray.add("BB");
        Collections.sort(myArray,Collator.getInstance());
3
Hatem Badawi

Java 8なので、Streams APIを使用してソートできます。

List<String> fruits = Arrays.asList("Apple", "Apricot", "banana");

List<String> sortedFruit = fruits.stream()
      .sorted(String.CASE_INSENSITIVE_ORDER)
      .collect(Collectors.toList())

Collections.sortとの違いは、これが新しいリストを返し、既存のリストを変更しないことです。

2
Andrejs

次のように、リストのデフォルトの sort メソッドを直接呼び出すことができます。

myList.sort(String.CASE_INSENSITIVE_ORDER); // reads as the problem statement and cleaner

または:

myList.sort(String::compareToIgnoreCase);  // reads as the problem statement and cleaner
1
Aomine

コンパレータファクトリクラスで、次のようなことを行います。

 private static final Comparator<String> MYSTRING_COMPARATOR = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
      return s1.compareToIgnoreCase(s2);
    }
  };

  public static Comparator<String> getMyStringComparator() {
    return MYSTRING_COMPARATOR;

これは大文字と小文字を区別しないcompare toメソッドを使用します(独自のメソッドを作成する理由)。この方法で、コレクションを次のように並べ替えることができます。

List<String> myArray = new ArrayList<String>();
//fill your array here    
Collections.sort(MyArray, MyComparators. getMyStringComparator());
1
user3561002

あなたの場合、ListのStringsがあり、すでに提案されているほとんどのソリューション(@guyblankの回答が特に好きです)は問題ありませんが、!!!のBeanがListの場合、私の場合、次のようにBeanでComparableインターフェイスを使用できます。

_public class UserBean implements Comparable<UserBean> {

   private String name;
   private String surname;        
   private Integer phone;

   // GETTERS AND SETTERS

   public int compareTo(UserBean bean) {
       return name.compareToIgnoreCase(bean.name);
   }

}
_

次に、必要なのはArrayList<UserBean> userBeanArray = new ArrayList<UserBean>();を作成し、それを入力してソートするだけです:Collections.sort(userBeanArray);

これで完了です!

コミュニティに役立つことを願っています;-)

0
CarlosLeo

if(fruits[i].charAt(0) == currChar)およびchar currChar = fruits[0].charAt(0)ステートメントで文字列の最初の文字を小文字に変換しようとしましたか?

0
denolk

CollectionsとArrayListを使用した例:

例「CompareStrings」のようなインターン静的クラスを開発します。

Mainメソッドでインターン静的クラスを呼び出します。

理解しやすく、正常に動作します!

import Java.util.ArrayList;
import Java.util.Collections;
import Java.util.Comparator;

public class MainClass {
    public static void main(String[] args) {
        ArrayList<String> myArray = new ArrayList<String>();
        myArray.add("zzz");
        myArray.add("xxx");
        myArray.add("Aaa");
        myArray.add("bb");
        myArray.add("BB");
        Collections.sort(myArray, new MainClass.CompareStrings());
        for(String s : myArray) {
            System.out.println(s);
        }
    }

    public static class CompareStrings implements Comparator<String> {
        @Override
        public int compare(String s1, String s2) {
           return s1.compareToIgnoreCase(s2);
        }
    }
}
0
Hugo Silva