如何按字母顺序sorting而忽略区分大小写?
我有这个代码,但只适用于小写字母。 我想这个sorting列表,而忽略大写字母..
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); } } }
下面是一个简单的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()); } } }
Collections.sort(listToSort, String.CASE_INSENSITIVE_ORDER);
你很难清楚你想做什么,但是你可以像这样sorting:
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);
Collections.sort()
让您传递一个自定义的比较器来进行sorting。 对于不区分大小写的sorting, String
类提供了一个名为CASE_INSENSITIVE_ORDER
的静态最终比较器。
所以在你的情况下,所有需要的是:
Collections.sort(caps, String.CASE_INSENSITIVE_ORDER);
我不敢相信没有人提及Collator 。 几乎所有这些答案都只适用于英语。
您应该几乎总是使用Collator进行基于字典的sorting 。
对于不区分大小写的拼写检索英语语言,请执行以下操作:
Collator usCollator = Collator.getInstance(Locale.US); usCollator.setStrength(Collator.PRIMARY); Collections.sort(listToSort, usCollator);
我喜欢比较类SortIgnoreCase
,但会使用这个
public class SortIgnoreCase implements Comparator<String> { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); // Cleaner :) } }
将java.text.Collator.getInstance()
传递给Collections.sort
方法; 它会按字母sorting而忽略区分大小写。
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());
在您的比较器工厂类中,执行如下操作:
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;
这使用比较大小写不敏感的方法(为什么写你自己的)。 这样你可以使用集合sorting像这样:
List<String> myArray = new ArrayList<String>(); //fill your array here Collections.sort(MyArray, MyComparators. getMyStringComparator());
从Java 8开始,您可以使用Streams API进行sorting:
List<String> fruits = Arrays.asList("apple", "Apricot", "banana"); List<String> sortedFruit = fruits.stream() .sorted(String.CASE_INSENSITIVE_ORDER) .collect(Collectors.toList())
与Collections.sort
的区别是这将返回一个新的列表,不会修改现有的。
你尝试将string的第一个字符转换为小写if(fruits[i].charAt(0) == currChar)
和char currChar = fruits[0].charAt(0)
语句吗?
使用Collections和ArrayList的例子:
像例子“CompareStrings”开发一个实习生静态类。
在main方法中调用intern静态类。
易于理解,工作正常!
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); } } }
在你的情况下,你有一个stringList
和大多数已经提出的解决scheme(我特别喜欢@guyblank答案)是好的,但!!!,如果你有一个bean的List
,这是我的情况,你可以使用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); } }
那么你只需要创build你的ArrayList<UserBean> userBeanArray = new ArrayList<UserBean>();
,填充并sorting: Collections.sort(userBeanArray);
你做完了!
希望能帮助社区;-)
这里是一个sorting数组的例子:不区分大小写
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] * /