我尝试过做这些人做过的事情: How to split a comma-separated string? 但是当我做以下事情时:
{{1}}
当我输入像“1,2,3”这样的字符串时,我会打印3张。当我输入“1,2,3”时,我得到1张打印。出于某种原因,当字符串中包含空格时,它不希望工作。
正如下面的答案之一所说,直接输入“1,2,3”似乎工作正常,但是当从Scanner(System.in).next()中获取时,它不是。
答案 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
并重复使用它。