我有这个代码,但只适用于小写字母.我希望这可以对列表进行排序,同时忽略大写字母..
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 142
Collections.sort(listToSort, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
Dav*_*unt 40
这是很清楚你正在尝试做的,但你可以排序像这样的列表:
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);
Run Code Online (Sandbox Code Playgroud)
Nic*_*ckT 31
这是一个简单的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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 31
Collections.sort()允许您传递自定义比较器以进行排序.对于不区分大小写的排序String类,提供了一个静态的最终比较器CASE_INSENSITIVE_ORDER.
所以在你的情况下,所需要的只是:
Collections.sort(caps, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
Ada*_*ent 12
我无法相信没有人提到Collator.几乎所有这些答案都只适用于英语.
您应该几乎总是使用Collator进行基于字典的排序.
对于不区分大小写的搜索英语的collator,您可以执行以下操作:
Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
Collections.sort(listToSort, usCollator);
Run Code Online (Sandbox Code Playgroud)
从 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())
Run Code Online (Sandbox Code Playgroud)
不同之处Collections.sort在于,这将返回一个新列表,并且不会修改现有列表。
我喜欢比较器类SortIgnoreCase,但会使用它
public class SortIgnoreCase implements Comparator<String> {
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2); // Cleaner :)
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Java 8 中的数组排序方式-> 简单的柠檬榨汁机
String[] names = {"Alexis", "Tim", "Kyleen", "KRISTY"};
Arrays.sort(names, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
我使用的方法参考String::compareToIgnoreCase
| 归档时间: |
|
| 查看次数: |
85124 次 |
| 最近记录: |