如何排序文本文件,Java

时间:2014-04-17 12:35:39

标签: java arrays sorting split

这是文字 -

CAR,标致,3008,12500

CAR,宝马,316,4995

CAR,福特,嘉年华,2995

我希望对此进行排序,并展示最便宜的车。但首先我需要将文本分开。 现在我知道你可以做text.split(“\ r \ n”);但这不起作用。有任何想法吗 ?


import java.io.BufferedReader;
import java.io.FileReader;


public class Vehicle {
    public static void main(String[]args) throws Exception
    {
        FileReader file = new FileReader("C:/Users/Aaron/Documents/java/car_file.txt");
        BufferedReader reader = new BufferedReader(file);
        String text = "";
        String line = reader.readLine();
        while (line!= null)
        {
            text += line;
            line = reader.readLine();
        }

        System.out.println(text);

        String words[] = text.split(",|\r\n| ");
        int count=words.length;
        System.out.println(count);
    }
}

3 个答案:

答案 0 :(得分:1)

您似乎无法在换行符上拆分它的原因是,当您拨打reader.readLine()时,它会移除换行符。

例如,说你有这个:

line one\nline two\n

在文本编辑器中,您会看到:

line one
line two

如果你String s = ""; s += reader.readLine(); s += reader.readLine();,你最终会添加"第一行"第一次和"第二行"第二次,对于新的line oneline two字符串。

import java.io.BufferedReader;
import java.io.FileReader;


public class Vehicle {
    public static void main(String[]args) throws Exception
    {
        FileReader file = new FileReader("C:/Users/Aaron/Documents/java/car_file.txt");
        BufferedReader reader = new BufferedReader(file);
        String text = "";
        String line = reader.readLine() +"\n";
        while (line!= null)
        {
            text += line;
            line = reader.readLine() +"\n";
        }

        System.out.println(text);

        String lines[] = text.split("\n");
        int count = lines.length;
        System.out.println(count);

        for(String line : lines) {
            String words[] = line.split(",");
            <<do something with words array>>
        }
    }
}

请记住,这不是解析此问题的最佳方法。如果您在SO上快速搜索,可以使用CSV阅读器库。

答案 1 :(得分:1)

您可以使用ArrayList of String代替Array of String,并执行以下操作:

List<String> words = new ArrayList<>();
while (line!= null)
    {
        words.add(line);
        line = reader.readLine();
    }
int count=words.size();
    System.out.println(count);

或者,如果您不想使用List,您可以这样做:

while (line!= null)
    {
        text += line+"#";
        line = reader.readLine();
    }

    System.out.println(text);

    String words[] = text.split("#");
    int count=words.length;
    System.out.println(count);

答案 2 :(得分:0)

最好在循环中拆分每一行:

List<String[]> lineFields = new ArrayList<>();
while (line != null) {
  list.add(line.split(",");
  line = reader.readLine();
}

然后处理列表。