12

我正在使用嵌套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,这些" "是我需要返回的。

4

5 回答 5

14

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

于 2013-08-10T05:07:20.370 回答
4

默认情况下,扫描仪使用空格来分隔标记。

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

要使用不同的标记分隔符,请调用 useDelimiter(),指定正则表达式。例如,假设您希望标记分隔符是一个逗号,可以选择后跟空格。你会调用,

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

阅读更多来自http://docs.oracle.com/javase/tutorial/essential/io/scanning.html

于 2013-08-10T05:11:22.680 回答
2

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

Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。

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

useDelimiter更好的是,您可以使用该方法定义什么是令牌。

于 2013-08-10T05:11:04.380 回答
1

这对你有用

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

    }
于 2013-08-10T05:15:06.153 回答
0

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

String fileContent = new Scanner(new File("D:\\sample.txt"))
            .useDelimiter("")
            .tokens()
            .reduce("", String::concat);
于 2020-11-12T17:14:50.837 回答