Scanner类跳过空格

时间:2013-08-10 05:04:19

标签: java arrays

我使用嵌套的Scanner循环从字符串行(从文本文件)中提取数字,如下所示:

String str = testString;            
Scanner scanner = new Scanner(str); 
while (scanner.hasNext()) {
    String token = scanner.next();
    // Here each token will be used
}

问题是这段代码会跳过所有空格" ",但我也需要使用这些“空格”。那么Scanner可以返回空格还是我需要使用别的东西?

我的文字文件可能包含以下内容:

0
011
abc
d2d

sdwq

sda

这些空行每行包含1 " ",而" "就是我需要返回的内容。

5 个答案:

答案 0 :(得分:12)

使用扫描仪的hasNextLine()nextLine()方法,您将找到解决方案,因为这样可以捕获空白行或空白行。

答案 1 :(得分:4)

默认情况下,扫描程序使用空格分隔令牌。

使用Scanner#nextLine方法,使此扫描程序超过当前行,并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。

  

要使用其他标记分隔符,请调用useDelimiter(),指定   一个正则表达式。例如,假设您需要令牌   分隔符是逗号,可选地后跟空格。你会   调用,

scanner.useDelimiter(",\\s*");

http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

了解详情

答案 2 :(得分:2)

您必须了解什么是令牌。阅读Scanner的文档:

  

扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。

您可以使用nextLine()方法获取整行,而不是“忽略”任何空格。

最好使用useDelimiter方法定义什么是令牌。

答案 3 :(得分:0)

这对你有用

Scanner scanner = new Scanner(new File("D:\\sample.txt"));
    while (scanner.hasNextLine()) {
        String token = scanner.nextLine();
        System.out.println(token);

    }

答案 4 :(得分:0)

要使用更实用的方法,您可以使用以下方法:

String fileContent = new Scanner(new File("D:\\sample.txt"))
            .useDelimiter("")
            .tokens()
            .reduce("", String::concat);