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

如何访问java文件中的每个单词?,java,arrays,string,file,Java,Arrays,String,File,我试图将这个文件中的每个单词都保存在一个数组中,这样我就可以在上面应用我自己的语言实现。我已经应用了拆分,但是当我将字符串放入变量部分时,parts[0]将显示整个文件,而不是仅显示一个单词,而parts[1]将给出一个错误 java.lang.ArrayIndexOutofBounds异常:2 如何访问此文件中的每个单词 String[] parts = line.split("\\s+"); System.out.print(parts[0] + '\n'); 文件test.snol包含

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

java.lang.ArrayIndexOutofBounds异常: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

空白的正则表达式匹配标记是
\s
。您的代码使用正斜杠(
/
)而不是没有特殊意义的反斜杠(
\
),因此您的代码试图匹配两个正斜杠,后跟一个或多个
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);
    }
}

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

String[] words = Files.lines(Paths.get(PATH))
                      .flatMap(line -> Arrays.stream(line.split(" ")))
                      .toArray(String[]::new);
或者,如果您想以
字符串[]
列表的形式访问每一行,您可以使用:-

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

您如何读取该文件?我认为您的正则表达式是错误的。你要的是反斜杠,不是正斜杠。尝试
line.split(\\s+)
file test.snol contains snol INTO num IS 5 INTO res IS MULT num INTO res IS MULT res INTO res IS MOD res num PRINT num PRINT res loni我想编辑文件并放入空格,但它基本上是一个文本文件,包含代码,行之间用空格分隔。@elanburger系统.out.PRINT的输出(部件[0]+'\n');已更改,但它只显示每行的第一个字。为什么它在for(String line:lines)上有错误?它在此处表示找不到符号,因为您需要为它提供文件中的行。您没有说明如何读取该文件,因此我无法帮助您。public static void main(String[]args)抛出IOException{//打开此文件。BufferedReader reader=new BufferedReader(new FileReader(“D:\\test.snol”);//读取文件中的行。while(true){String line=reader.readLine();如果(line==null){break;}