Java 如何读取txt并通过管道对其进行分隔

Java 如何读取txt并通过管道对其进行分隔,java,bufferedreader,Java,Bufferedreader,我有一个txt文件,格式如下: 1 | Argentina |Y|POSTAL_C |CAPITAL|STATES 我想转换由“|”分隔的每个位置,无论它是示例数组中的一个位置,如下所示: 0 | 1 |2|3 |4 |5 1 | Argentina |Y|POSTAL_C |CAPITAL|STATES 并在数组中处理它们 My code public void ReadFile2() throws IOException { String

我有一个txt文件,格式如下:

1 | Argentina |Y|POSTAL_C |CAPITAL|STATES
我想转换由“|”分隔的每个位置,无论它是示例数组中的一个位置,如下所示:

0 |   1       |2|3        |4      |5
1 | Argentina |Y|POSTAL_C |CAPITAL|STATES
并在数组中处理它们

My code

public void ReadFile2() throws IOException {
    String referencePath = "C:\\Users\\Admin\\Desktop\\PRUEBA.txt";
    BufferedReader br;
    br = new BufferedReader(new FileReader(referencePath));

    String lines = br.readLine();
            lines.split("\n", 6);

    this.logger.info("Starting...");

    while (lines != null) {
        if (!lines.isEmpty() && lines.length() >7) {
            String[] values = lines.split("|");

            System.out.println(values[0]); ----> should return 1
        }
      lines = br.readLine();
    }
    br.close();


}

感谢您的评论

,因为传递给
split
方法的字符串应该是正则表达式,您需要使用
行。split(“\\\\”)

在正则表达式中,管道符号具有特殊的含义(它的工作方式类似于或运算符),所以需要通过反斜杠将其转义。在java字符串中,文字反斜杠有特殊的含义,因为它是跟在字符后面的转义符,所以这里有两个反斜杠。结果字符串实际上只是
\\124;

试试这个:

String test = "1 | Argentina |Y|POSTAL_C |CAPITAL|STATES";
String[] values = test.split("\\|");
for (String value : values) {
   System.out.println(value);
}
这将返回输出:

1
Argentina
Y
POSTAL_C
CAPITAL
STATES

可能您还希望使用
.trim()
特定值来删除不必要的空格。

因为传递给
split
方法的字符串应该是正则表达式,您需要使用
lines.split(\\\\;”)

在正则表达式中,管道符号具有特殊的含义(它的工作方式类似于或运算符),所以需要通过反斜杠将其转义。在java字符串中,文字反斜杠有特殊的含义,因为它是跟在字符后面的转义符,所以这里有两个反斜杠。结果字符串实际上只是
\\124;

试试这个:

String test = "1 | Argentina |Y|POSTAL_C |CAPITAL|STATES";
String[] values = test.split("\\|");
for (String value : values) {
   System.out.println(value);
}
这将返回输出:

1
Argentina
Y
POSTAL_C
CAPITAL
STATES

您可能还希望使用
.trim()
特定值来删除不必要的空格。

split()
对字符串调用将返回字符串数组。当您执行
行时。拆分(“\r”,6)并且不将其分配给任何对象,对split的调用不会执行任何操作,因为它返回的值丢失。while循环很可能是无止境的,因为行仍然保存
br.readLine()
的结果,因此永远不会为空。我不知道你为什么要检查你的字符串长度是否大于7。如果文件有多行,循环应该包含该行的读取,否则您将只读取一行。我尝试先通过换行符“\n”进行迭代,然后通过管道分隔进行迭代,以便访问对象,您是否知道如何解决您在注释中开始的问题@Justanotherdeveloper调用
split(“|”)在保存你所读行的值的字符串上,你会得到你想要的东西..拆分(“|”)Don work men xd我已经尝试过@justanotherdeveloper检查我对上一条评论所做的编辑。如果对字符串调用“\\\\”
split()
将其拆分,则该函数将返回字符串数组。当您执行
行时。拆分(“\r”,6)并且不将其分配给任何对象,对split的调用不会执行任何操作,因为它返回的值丢失。while循环很可能是无止境的,因为行仍然保存
br.readLine()
的结果,因此永远不会为空。我不知道你为什么要检查你的字符串长度是否大于7。如果文件有多行,循环应该包含该行的读取,否则您将只读取一行。我尝试先通过换行符“\n”进行迭代,然后通过管道分隔进行迭代,以便访问对象,您是否知道如何解决您在注释中开始的问题@Justanotherdeveloper调用
split(“|”)在保存你所读行的值的字符串上,你会得到你想要的东西..拆分(“|”)Don work men xd我已经尝试过@justanotherdeveloper检查我对上一条评论所做的编辑。如果按“\\\\”拆分,则该选项有效