我正在尝试使用 android 对文本文件中的数字进行排序。你能帮助我吗?此代码正在对部分而不是全部进行排序。我的意思是它排序 1.A 2.C 20.D 3.C 4.A 5.A 那样。它应该是 1.A 2.C 3.C 4.A 5.A 6.B 20.D 我需要转换整数,但我该怎么做?
尝试 {
File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists())
{
root.mkdirs();
}
File gpxfile = new File(root, fileName);
FileWriter writer = new FileWriter(gpxfile,true);
writer.append(s+"\n\n");
writer.flush();
writer.close();
FileReader fileReader = new FileReader(gpxfile);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String inputLine;
List<String> lineList = new ArrayList<String>();
while ((inputLine = bufferedReader.readLine()) != null) {
lineList.add(inputLine);
}
fileReader.close();
Collections.sort(lineList);
System.out.println(lineList);
FileWriter fileWriter = new FileWriter(gpxfile);
PrintWriter out = new PrintWriter(fileWriter);
for (String outputLine : lineList) {
out.println(outputLine);
}
out.flush();
out.close();
fileWriter.close();
//Toast.makeText(this, "Data has been written to Report File", Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
e.printStackTrace();
}
最佳答案
您当前正在对 String
进行排序,您需要对 Interger
进行排序
- 解析“1.A 20.A 30.A 2.B 20.C 3.A”
因为您的输入文件似乎包含字母和数字的混合,例如 "1.A 20.A 30.A 2.B 20.C 3.A" 您可以创建一个新的类实现 Comparable
以定义您自己的排序。
class Item implements Comparable<Item>{
String stringPart;
Integer intPart;
String c;
public Item(String c){
this.c = c;
String[] res = c.split("\\.");
intPart = Integer.valueOf(res[0]);
stringPart = res[1];
}
@Override
public int compareTo(Item o) {
if(intPart.intValue() == o.intPart.intValue()){
return stringPart.compareTo(o.stringPart);
}else{
return intPart.compareTo(o.intPart);
}
}
public String getContent(){
return c;
}
}
完成后,您可以根据新创建的类更改列表定义:
List<Item> lineList = new ArrayList<>();
您可以解析输入行以填充列表
List<Item> lineList = new ArrayList<>();
while ((inputLine = bufferedReader.readLine()) != null) {
String[] res = inputLine.split(" ");
for(String s : res){
lineList.add(new Item(s));
}
}
排序列表内容调用:
Collections.sort(lineList);
编写输出文件:
for (Item i : lineList) {
out.println(i.getContent());
}
输入
"1.A 20.A 30.A 2.B 20.C 3.A"
会产生
1.A 2.B 3.A 20.A 20.C 30.A
- 解析“A.1 A.20 A.30 B.2 C.20 A.30”
如果有这样的输入内容切换字符和数字"A.1 A.20 A.30 B.2 C.20 A.30"你只需要修改以下内容先按字符排序,然后按数字排序:
读取Item
的内容
intPart = Integer.valueOf(res[1]);
stringPart = res[0];
排序方法:
@Override
public int compareTo(Item o) {
if(stringPart.equals(o.stringPart)){
return intPart.compareTo(o.intPart);
}else{
return stringPart.compareTo(o.stringPart);
}
}
关于java - 在文本文件android中对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020855/