如何用scanner.next()读取空格

时间:2012-10-21 02:09:29

标签: java whitespace next

我有一个扫描仪,并将分隔符设置为“”,但它仍然不会使用next()方法读取空格。我知道nextline()有效,但我需要单独检查输入中的每个字符,包括空格;这是一个复杂的数据分析问题。不过我很难过。谷歌一无所获。

任何人都可以帮我吗?我正在考虑将空格转换为特殊字符,然后为了分析字符,将其反转回一个空格,包含在一个字符串中......但这似乎有点矫枉过正!有更优雅的方式吗?

编辑:我的主要任务是,取一个字符串,并逐个字符地重复检查,以检查各种任务的数据。你必须多次检查它,一次检查一个字符,所以我认为扫描仪类是我最好的选择,因为它很容易使用(至少对我来说)。那是我的任务。有没有更简单的方法来解决这个问题?

4 个答案:

答案 0 :(得分:4)

Scanner scanner = new Scanner(file).useDelimiter("'")

但这非常低效。更好的方法是:逐字逐句阅读:

private static void readCharacters(Reader reader)
        throws IOException {
    int r;
    while ((r = reader.read()) != -1) {
        char ch = (char) r;
        doSomethingWithChar(ch);
    }
}

另见HERE

答案 1 :(得分:3)

而不是

scanner.next();

使用

scanner.nextLine();

这样您就可以使用分隔符来解决问题。

答案 2 :(得分:2)

尝试.useDelimiter("(\\b|\\B)")

它将使用每个字符的边界作为分隔符。

以下代码将准确打印用户键入的内容。 不会忽略任何字符,包括空格。

Scanner charScanner = new Scanner( System.in ).useDelimiter( "(\\b|\\B)" ) ;
while( charScanner.hasNext() ) 
    System.out.print( charScanner.next() ) ;

答案 3 :(得分:0)

使用BufferedReader读取输入行,然后在for循环中迭代字符串,处理每个char
您可以Character.isWhitespace(char c)检查字符是否为空格。