你怎么保持scanner.next()不包括换行符?
我试图简单地使用带有分隔符等于“”的scanner .next()读取文本文件中的单词,但扫描程序包含带有令牌的换行符/回车符。
我已经搜索了互联网,试图找到这个问题的一个很好的例子,但没有找到它所以我在这里发布它。 我在SO上发现了另一个类似的问题。 我还查看了有关扫描仪和模式的文档( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html )但我仍然无法找到解决方法这个。
文本文件:
这是一个测试
看看if1这个,是否有效
好!
码:
int i = 0; String string; try(Scanner scanner = new Scanner(new File(filename))) { scanner.useDelimiter(" "); while(scanner.hasNext()) { string = scanner.next(); System.out.println(i++ + ": " + string); } }catch(IOException io_error) { System.out.println(io_error); }
输出:
0:这个
1:是
2:a
3:测试
至
4:看
5:if1
6:这个,
7:是
8:工作
好!
如您所见,#3和#8有两个由换行符分隔的单词。 (我知道我可以将它们分成两个单独的字符串。)
Scanner的文档说:
扫描程序使用的默认空白分隔符由
Character.isWhitespace
识别
Character.isWhitespace
的链接文档说:
根据Java确定指定的字符是否为空格。 当且仅当它满足以下条件之一时,字符才是Java空白字符:
- 它是一个Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是一个不间断的空格(’\ u00A0’,’\ u2007’,’\ u202F’)。
- 这是’\ t’,U + 0009 HORIZONTAL TABULATION。
- 它是’\ n’,U + 000A LINE FEED。
- 这是’\ u000B’,U + 000B VERTICAL TABULATION。
- 它是’\ f’,U + 000C FORM FEED。
- 这是’\ r’,U + 000D CARRIAGE RETURN。
- 它是’\ u001C’,U + 001C FILE SEPARATOR。
- 它是’\ u001D’,U + 001D GROUP SEPARATOR。
- 它是’\ u001E’,U + 001E RECORD SEPARATOR。
- 它是’\ u001F’,U + 001F UNIT SEPARATOR。
所以,只是不要设置任何特定的分隔符。 保持默认值,换行符将被视为分隔符,就像空格一样,这意味着令牌不会包含换行符。
在string = scanner.next();
替换\n
即
string = string.replace("\n", "");
然后打印出字符串变量..这应该可以解决问题