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

时间:2018-11-15 16:56:03

标签: java arrays string file

我试图将文件中的每个单词都保存在一个数组中,以便可以在其中应用自己的语言实现。我已经应用了split,但是当我将字符串放入可变部分时,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

2 个答案:

答案 0 :(得分:2)

如果您使用的是Java-8,则可以在一行中使用它:-

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="par"></p>
<button class="but" id="1">1</button>
<button class="but" id="2">2</button>
<button class="but" id="3">3</button>
<button class="but" id="4">4</button>
<button class="but" id="5">5</button>

或者,如果您希望以String[] words = Files.lines(Paths.get(PATH)) .flatMap(line -> Arrays.stream(line.split(" "))) .toArray(String[]::new); 中的list的形式访问每一行,则可以使用:-

String[]

答案 1 :(得分:0)

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

在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);
    }
}