我试图将文件中的每个单词都保存在一个数组中,以便可以在其中应用自己的语言实现。我已经应用了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
答案 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);
}
}