从文件中拆分字符串换行符

时间:2013-11-30 10:11:44

标签: java regex string file split

a.txt:

1,2,3
1,2,6
2,4,5

阅读和分割

String wynik = readFileAsString("a.txt");
String[] wyniki = wynik.split("");

我似乎无法找到在文件中的newLines之后将String拆分出来的方法,并且没有像这样指定(这是我在stackoverflow上的所有其他示例中找到的):

1,2,3\n1,2,6\n2,4,5\n

我的readFileAsString工作正常,它实际上就是这样读取的(没有拆分):

1,2,31,2,62,4,5

我知道我可以在我的文件中添加一些内容,以便将其拆分,例如

1,2,3t
...

但我也需要该文件清晰,没有任何不必要的符号。

整件事情看起来像这样:

public static String readFileAsString(String file) {
    String line, results = "";
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        // readLine() zwraca nulla na koncu pliku, stad zabezpieczenie
        while ((line = reader.readLine()) != null) {
            results += line;
        }
        reader.close();
        // return results;
    } catch (IOException e) {
        System.err.println("Error");
    }
    return results;
}

    public static void main(String args[]) {

        String wynik = readFileAsString("a.txt");
        System.out.println(wynik);
        String[] wyniki = wynik.split("[\\r\\n]+");

        ArrayList<Trojka> wynikArrList = new ArrayList<Trojka>();

        for (int i = 0; i < wyniki.length; i++) {
            String[] temp1 = wyniki[i].split(",");
            int m = 0;
            int n = 0;
            int t = 0;
            try {
                m = Integer.parseInt(temp1[0]);
            } catch (Exception e) {
            }
            try {
                n = Integer.parseInt(temp1[1]);
            } catch (Exception e) {
            }
            try {
                t = Integer.parseInt(temp1[2]);
            } catch (Exception e) {
            }

            Trojka temp = new Trojka(m, n, t);

            boolean newRecord = true;
            for (Trojka a : wynikArrList) {
                if (a.getM() == temp.getM() && a.getN() == temp.getN()) {
                    a.addT((int) temp.getT());
                    newRecord = false;
                    break;
                }
            }
            if (newRecord) {
                wynikArrList.add(temp);
            }
        }

        wynik = "";

        for (Trojka a : wynikArrList) {
            wynik += a.getM() + "," + a.getN() + "," + a.getT() + "\n";
        }

        System.out.println(wynik);  

    }
}

3 个答案:

答案 0 :(得分:2)

如果您想按换行符拆分字符串,请尝试使用此正则表达式:

String[] out2 = out.split("[\\r\\n]+");

更新: readFileAsString的代码应如下所示:

public static String readFileAsString(String file) {
   return new Scanner(new File(file)).useDelimiter("\\Z").next()'
}

更新2:

public static String readFileAsString(List<String> Lines, String file) {
    String line, results = "";
    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        // readLine() zwraca nulla na koncu pliku, stad zabezpieczenie
        while ((line = reader.readLine()) != null) {
            results += line;
            lines.add(line);
        }
        reader.close();
        // return results;
    } catch (IOException e) {
        System.err.println("Error");
    }
    return results;
}

现在称之为:

ArrayList<Trojka> wynikArrList = new ArrayList<Trojka>();
String wynik = readFileAsString(wynikArrList, "a.txt");

答案 1 :(得分:1)

请注意,“新行”由不同的字符表示,具体取决于上下文。保存方法是使用split("\\R")在Java8 + 中可用)。

示例:

final String[] a = "one\ntwo\r\nthree\rfour\n".split("\\R");
assertArrayEquals(new String[]{"one", "two", "three", "four"}, a);

另见https://stackoverflow.com/a/31060125/868941

答案 2 :(得分:0)

您正尝试将字符串与""分开,这是空字符串。如果您想使用换行符将其拆分,请改用"\n"。但是,由于我们没有看到您如何读取文件(read, you probably a returning a concatenated string from readFileAsString`,因此很难说它出错了。