拆分命令不适用于扫描仪

时间:2015-10-01 00:08:21

标签: java split java.util.scanner

我尝试过做这些人做过的事情: How to split a comma-separated string? 但是当我做以下事情时:

{{1}}

当我输入像“1,2,3”这样的字符串时,我会打印3张。当我输入“1,2,3”时,我得到1张打印。出于某种原因,当字符串中包含空格时,它不希望工作。

正如下面的答案之一所说,直接输入“1,2,3”似乎工作正常,但是当从Scanner(System.in).next()中获取时,它不是。

2 个答案:

答案 0 :(得分:2)

我尝试使用以下代码,当我在UserInput字符串中使用“1,2,3”时打印3

    String UserInput = "1, 2, 3";
    List<String> GradesNonInt = Arrays.asList(UserInput.replaceAll("\\s","").split(","));
    System.out.println(GradesNonInt.size());

问题不在于拆分,但这种情况正在发生,因为Scanner使用分隔符模式将其输入分解为标记,该分隔符模式默认匹配空格,这就是显示此行为的原因。 Refer this link.

如果您愿意,可以使用扫描程序类的useDelimiter method将分隔符更改为空格以外的其他内容

  

<强>更新

要将分隔符更改为下一行并确保代码接受字符串中的空格,您可以将代码更改为以下

    String UserInput = new Scanner(System.in).useDelimiter("\n").next();
    List<String> GradesNonInt = Arrays.asList(UserInput.replaceAll("\\s","").split(","));
    System.out.println(GradesNonInt.size());

答案 1 :(得分:1)

问题是Scanner#next()只能返回下一个令牌(直到找到下一个分隔符或数据结尾)。因此,对于1, 2, 3,之类的输入,它将返回1,

使用Scanner#nextLine()读取整行。

每次要从用户 读取数据时, 也不会创建新的Scanner实例。为每个应用程序创建一个扫描程序处理System.in并重复使用它。