Как сортировать в алфавитном порядке, игнорируя регистр?

У меня есть этот код, но работает только для строчных букв. Я хочу, чтобы это отсортировало список, игнорируя буквы в верхнем регистре.

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 matchedFruits = new ArrayList(); 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 tmp = new ArrayList(); 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); } } } 

Вот простой пример 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 lst; Sorter() { lst = new ArrayList(); // 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 { public int compare(Object o1, Object o2) { String s1 = (String) o1; String s2 = (String) o2; return s1.toLowerCase().compareTo(s2.toLowerCase()); } } } 
 Collections.sort(listToSort, String.CASE_INSENSITIVE_ORDER); 

Очень неясно, что вы пытаетесь сделать, но вы можете отсортировать список следующим образом:

 List fruits = new ArrayList(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() { @Override public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }); System.out.println("Sorted: " + fruits); 

Collections.sort() позволяет вам передавать пользовательский компаратор для заказа. Для нечувствительного к регистру упорядочения class String предоставляет статический конечный компаратор CASE_INSENSITIVE_ORDER .

Так что в вашем случае все, что необходимо:

 Collections.sort(caps, String.CASE_INSENSITIVE_ORDER); 

Я не могу поверить, что никто не ссылался на Collator . Почти все эти ответы будут работать только на английском языке.

Вы почти всегда должны использовать Collator для сортировки на основе словаря .

Для нечувствительного к регистру коллаборатора, ищущего английский язык, вы делаете следующее:

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

Мне нравится class сравнения SortIgnoreCase , но он бы использовал это

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

Передайте java.text.Collator.getInstance() to Collections.sort ; он будет сортировать по алфавиту, игнорируя регистр.

  ArrayList myArray = new ArrayList(); myArray.add("zzz"); myArray.add("xxx"); myArray.add("Aaa"); myArray.add("bb"); myArray.add("BB"); Collections.sort(myArray,Collator.getInstance()); 

В своем classе фабрики компараторов сделайте что-то вроде этого:

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

Это использует сравнение с методом, который нечувствителен к регистру (зачем писать самостоятельно). Таким образом, вы можете использовать похожие коллекции:

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

Начиная с Java 8 вы можете сортировать с помощью Streams API:

 List fruits = Arrays.asList("apple", "Apricot", "banana"); List sortedFruit = fruits.stream() .sorted(String.CASE_INSENSITIVE_ORDER) .collect(Collectors.toList()) 

Разница с Collections.sort заключается в том, что это вернет новый список и не изменит существующий.

вы пытались преобразовать первый символ строки в нижний регистр, if(fruits[i].charAt(0) == currChar) и char currChar = fruits[0].charAt(0) утверждения?

Пример использования Коллекций и ArrayList:

Разработайте статический статический class, например, пример CompareStrings.

Вызовите статический class intern в основном методе.

Легко понять и отлично работает!

 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class MainClass { public static void main(String[] args) { ArrayList myArray = new ArrayList(); 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 { @Override public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } } } 

В вашем случае у вас есть List строк, и большинство из уже предложенных решений (я особенно люблю @guyblank ответ) прекрасно, но !!!, если у вас есть List бобов, что в моем случае, вы можете использовать интерфейс Comparable в вашем фасоле:

 public class UserBean implements Comparable { private String name; private String surname; private Integer phone; // GETTERS AND SETTERS public int compareTo(UserBean bean) { return name.compareToIgnoreCase(bean.name); } } 

Тогда вам нужно создать свой ArrayList userBeanArray = new ArrayList(); , заполните его и Collections.sort(userBeanArray); сортировку: Collections.sort(userBeanArray);

И ты это сделал!

Надеюсь помочь сообществу 😉

Вы можете напрямую вызвать метод сортировки по умолчанию в списке следующим образом:

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

или:

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

Вот пример сортировки массива: нечувствительный к регистру

 import java.text.Collator; import java.util.Arrays; public class Main { public static void main(String args[]) { String[] myArray = new String[] { "A", "B", "b" }; Arrays.sort(myArray, Collator.getInstance()); System.out.println(Arrays.toString(myArray)); } } 

/ * Выход: [A, b, B] * /

  • Как передать строку из одной активности в другую?
  • Доступ к мультимедийному streamу Android для аудиовизуализации
  • XMPP с библиотекой Java Asmack, поддерживающей X-FACEBOOK-PLATFORM
  • Почему double width = 50/110000; выход составляет 0,000000000000000?
  • Разбор JSON для JSON для JSON в JSONObject
  • AsyncTask.executeOnExecutor () до уровня API 11
  • Какую библиотеку OCR Java я должен использовать в Android?
  • Как версия Java для Android относится к версии Java SE?
  • URLConnection getContentLength () возвращает отрицательное значение
  • АБР по беспроводной сети
  • JRE 1.7 - версия java - возвращает: java / lang / NoClassDefFoundError: java / lang / Object
  • Interesting Posts
    Давайте будем гением компьютера.