【问题标题】:how to read a txt and delimit it by pipes如何读取 txt 并用管道分隔
【发布时间】:2020-12-15 16:10:23
【问题描述】:

我有一个 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();


}

感谢你的cmets

【问题讨论】:

  • split() 在字符串上调用会返回一个字符串数组。当您执行 lines.split("\r", 6); 并且不将其分配给任何内容时,对 split 的调用将不会执行任何操作,因为它返回的值会丢失。您的 while 循环很可能是无止境的,因为行仍然包含 br.readLine() 的结果,因此永远不会为空。我不知道为什么要检查字符串的长度是否大于 7。如果文件有多行,则循环应该包含读取该行,否则您只会读取一行。
  • 我正在尝试先通过换行符“\n”进行迭代,然后通过管道分隔,以便访问对象,您有什么想法如何解决您开始的问题在你的评论中? @JustAnotherDeveloper
  • 在字符串上调用split("|"); 来保存您读取的行的值会给您想要的。
  • .split("|") don't work men xd 我已经尝试过@JustAnotherDeveloper
  • 检查我对之前评论所做的编辑。如果你用“\\|”分割,它会起作用

标签: java bufferedreader


【解决方案1】:

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

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

试试这个:

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() 特定值以删除不必要的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2020-06-23
    • 2018-05-16
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多