【问题标题】:String newline split from file从文件中拆分字符串换行符
【发布时间】:2013-12-16 10:20:36
【问题描述】:

a.txt:

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

读取和拆分

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

我似乎找不到在文件中的 newLines 之后拆分字符串的方法,并且没有像这样指定(这是我在 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);  

    }
}

【问题讨论】:

    标签: java regex string file split


    【解决方案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】:

      如果你想用换行符分割字符串,那么试试这个正则表达式:

      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,2,31,2,62,4,5 (newline here) 1,2,31.0
      • @nobodynoone:拆分后如何打印结果数组?
      • 这个正则表达式:[\\r\\n]+将匹配`或更多\r\n在各种系统上形成换行符的字符。 [ and ] 被称为字符类,您可以在其中提供字符/符号列表进行匹配。
      • 感谢您的努力。解决了。​​
      • 正则表达式中的 + 用于 1 个或多个匹配项。有关正则表达式的详细信息,请参阅此站点:regular-expressions.info
      【解决方案3】:

      你试图用"" 分割你的字符串,这是空字符串。如果你想用换行符分割它,请改用"\n"。但是,由于我们看不到您是如何读取文件的(read, you probably a returning a concatenated string fromreadFileAsString`,所以很难判断哪里出了问题。

      【讨论】:

      • 如您所见,我拥有"" 的原因是我不知道如何使它工作。我的文件中没有"\n"。现在增加了阅读方法。
      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多