【问题标题】:How do I access every single word in a file java?如何访问文件java中的每个单词?
【发布时间】:2018-11-15 16:56:03
【问题描述】:

我试图将这个文件中的每个单词都保存到一个数组中,这样我就可以在它上面应用我自己的语言实现。我已经应用了拆分,但是当我将字符串放入变量部分时,parts[0] 将显示整个文件而不是仅显示一个单词,而parts[1] 将给出错误

java.lang.ArrayIndexOutOfBoundsException: 2

如何访问此文件中的每个单词?

String[] parts = line.split("\\s+");
System.out.print(parts[0] + '\n');

文件 test.snol 包含

SNOL
INTO num IS 5
INTO res IS MULT num num
INTO res IS MULT res res
INTO res IS MOD res num
PRINT num
PRINT res
LONS

【问题讨论】:

  • 你是如何读取文件的?
  • 我认为你的正则表达式是错误的。你想要一个反斜杠,而不是正斜杠。试试line.split("\\s+");
  • 文件 test.snol 包含 SNOL INTO num IS 5 INTO res IS MULT num num INTO res IS MULT res res INTO res IS MOD res num PRINT num PRINT res LONS
  • 我想编辑文件并放置空格,但它基本上是一个包含代码的文本文件,并且行由空格分隔。
  • @ElanHamburger System.out.print(parts[0] + '\n'); 的输出改变了,但它只显示每一行的第一个单词。

标签: java arrays string file


【解决方案1】:

如果您使用的是 java-8,您可以在一行中完成:-

String[] words = Files.lines(Paths.get(PATH))
                      .flatMap(line -> Arrays.stream(line.split(" ")))
                      .toArray(String[]::new);

或者,如果您想以listString[] 的形式访问每一行,您可以使用:-

List<String[]> lines = Files.lines(Paths.get(PATH))
                            .collect(Collectors.toList())
                            .stream().map(e -> e.split(" "))
                            .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    空格的正则表达式匹配标记是\s。您的代码使用正斜杠 (/) 而不是没有特殊含义的反斜杠 (\),因此您的代码试图匹配两个正斜杠后跟一个或多个 ss。

    在 Java 中,正则表达式通过字符串传递,因此反斜杠需要用第二个反斜杠转义(与不需要特殊处理的正斜杠不同)。您的正则表达式应为"\\s+",它将匹配更多的空白字符。

    您对split 的调用应返回一个数组,其中该行中的每个单词都作为不同的元素。

    如果您正在逐行阅读文件,则可以使用以下代码访问每个单词

    BufferedReader reader = new BufferedReader(new FileReader("D:\\test.snol"));
    String line;
    while ((line = reader.readLine()) != null) {
        String[] words = line.split("\\s+");
        for (String word : words) {
            System.out.println(word);
        }
    }
    

    【讨论】:

    • 为什么它在 for (String line :lines) 上有错误,这里说找不到符号
    • 因为您需要向它提供文件中的行。你没有说你是如何阅读文件的,所以我帮不了你。
    • public static void main(String [] args) throws IOException { //打开这个文件。 BufferedReader reader = new BufferedReader(new FileReader("D:\\test.snol")); // 从文件中读取行。 while (true) { String line = reader.readLine(); if (line == null) { break; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多