Java 按每个字符串中逗号后的值按字母顺序对ArrayList排序
我有一个包含如下字符串的ArrayList:Java 按每个字符串中逗号后的值按字母顺序对ArrayList排序,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,我有一个包含如下字符串的ArrayList: 第一条:一些文字,安娜贝利 第二项:一些文字,詹姆斯 第三项:一些文字,康纳 我想按每个字符串中逗号后的值按字母顺序对ArrayList排序 我怎样才能做到这一点 ArrayList<String> lineList = new ArrayList<>(); // New BufferedReader. BufferedReader reader = new BufferedReader(new
- 第一条:一些文字,安娜贝利
- 第二项:一些文字,詹姆斯
- 第三项:一些文字,康纳
ArrayList<String> lineList = new ArrayList<>();
// New BufferedReader.
BufferedReader reader = new BufferedReader(new FileReader(
file));
// Add all lines from file to ArrayList.
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
lineList.add(line);
}
// Close it.
reader.close();
// Print each line.
for (String line : lineList) {
System.out.println(line);
}
ArrayList lineList=new ArrayList();
//新的BufferedReader。
BufferedReader reader=新BufferedReader(新文件读取器(
档案);;
//将文件中的所有行添加到ArrayList。
while(true){
字符串行=reader.readLine();
如果(行==null){
打破
}
lineList.add(行);
}
//关上它。
reader.close();
//打印每一行。
用于(字符串行:行列表){
系统输出打印项次(行);
}
将a与方法一起使用
例如:
Collections.sort(lineList, new Comparator<String>{
public int compare(String str1, String str2) {
String actual1 = str1.split(",")[1];
String actual2 = str2.split(",")[1];
return actual1.compare(actual2);
}
});
Collections.sort(行列表,新比较器{
公共整数比较(字符串str1、字符串str2){
字符串actual1=str1.split(“,”[1];
字符串actual2=str2.split(“,”[1];
返回实际值1。比较(实际值2);
}
});
如果有零个或多个逗号,您可能需要某种方法来确保实际提取字符串的正确部分。例如,如IQV所述,您可以将
substring()
与lastIndexOf()
结合使用。如jesper所述,您需要一个比较器。在此比较器中,使用方法lastIndexOf(',')
识别forname,这是一个使用Java 8的单行程序:
lineList.sort((String s1, String s2) -> s1.split(",")[1].compareTo(s2.split(",")[1]));
Collections.sort(list, Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));
填充后不要对列表进行排序,动态排序:
public static void main(String[] args) throws IOException {
Set<String> lines = new TreeSet<>(Comparator.comparing(o -> o.substring(o.indexOf(','))));
// New BufferedReader.
BufferedReader reader = new BufferedReader(new FileReader("sample.txt"));
// Add all lines from file to ArrayList.
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
lines.add(line);
}
// Close it.
reader.close();
// Print each line.
for (String line : lines) {
System.out.println(line);
}
}
publicstaticvoidmain(字符串[]args)引发IOException{
设置行=新树集(Comparator.comparing(o->o.substring(o.indexOf(','))));
//新的BufferedReader。
BufferedReader=newBufferedReader(newFileReader(“sample.txt”);
//将文件中的所有行添加到ArrayList。
while(true){
字符串行=reader.readLine();
如果(行==null){
打破
}
行。添加(行);
}
//关上它。
reader.close();
//打印每一行。
用于(字符串行:行){
系统输出打印项次(行);
}
}
一个使用Java 8的线性变量:
lineList.sort((String s1, String s2) -> s1.split(",")[1].compareTo(s2.split(",")[1]));
Collections.sort(list, Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));
或更短
list.sort(Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));
您的文件是“csv”吗?如果是,则需要小心,因为逗号可以作为值的一部分包含,如“'Some,text',Annabelle”。不,它是一个txt文件,但是的,我理解其中的问题。谢谢如果您有较大的文件大小,那么创建已经排序的列表,而不是在内存中对其进行排序,会很方便。看看我的答案。好的,我会抽出时间来测试一下。谢谢你的帮助!“您可能需要某种方法来确保……”或者如果只有逗号在末尾,例如
Foo,
。