【问题标题】:Reading just integers from an input stream of integers and other characters从整数和其他字符的输入流中仅读取整数
【发布时间】:2014-03-28 09:32:04
【问题描述】:

这里是第一个问题,所以,如果不是很好,很抱歉。

我正在开发一个 java 程序,它将接受这样的输入

(1>2)(2>3)(3>4)(4>5)

(6>7)(7>8)(6>8)

然后将数字存储在一个数组中。现在,我只是想正确解析。所以我只是在单独的行上打印输出。这是我一直在尝试的:

Scanner input = new Scanner(System.in).useDelimiter("\\W");
for(int i = 0; (line = input.next()) != null; i++){
    System.out.println(i + ": " + line);
}

这就是得到这个输出

0:1

1:2

2:

3:2

4:3

5:

6:3

7:4

8:

9:4

10:5

11:

12:

13:6

14:7

15:

16:7

17:8

18:

19:6

20:8

21:

看起来当两个分隔符彼此相邻时,例如')(',它会打印出空格。我不确定它为什么这样做,或者它是否可以修复。有没有办法同时使用两者')(' 的字符作为一个分隔符?在调用 input.next() 而不使用 input.next() 作为空格的继续时,有没有办法摆脱空格?或者有什么比 Scanner 更好的东西可以避免这个问题吗?我查看了 BufferedReader 和 InputStreamReader,但在这种情况下似乎都没有用。

感谢您的任何意见和时间。 :)

【问题讨论】:

    标签: java regex string java.util.scanner delimiter


    【解决方案1】:

    看起来当两个分隔符彼此相邻时,例如")(",它会打印出空格。

    您的分隔符 \\W 设置为查找 一个 非单词字符,因此如果有两个分隔符彼此相邻,则表示它们之间存在空字符串并返回此空字符串.

    如果您希望分隔符匹配一个或多个非单词字符,您需要使用+ quantifer,如\\W+

    【讨论】:

    • 哇,这真的很容易。我想我应该更多地研究正则表达式。谢谢! :D
    • @dev_bit 没问题 :) 很高兴我能帮上忙。
    【解决方案2】:

    请改用\\W+。到目前为止,您只在分隔符处选择了一个 \W 字符。 + 将进行贪婪匹配,直到找不到为止。

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2018-08-05
      • 2022-09-28
      • 2014-08-18
      • 2016-08-09
      • 2019-07-26
      • 2018-10-25
      • 1970-01-01
      相关资源
      最近更新 更多