我正在读取stdin的字符串,该字符串被格式化为列表。我正在使用字符串中的信息来创建对象。
示例输入字符串的格式如下:
1 apple, 3 bananas, 2 pears
我希望在我去的时候读取该行创建对象,但我最大的问题是正确读取行以获取项目数,然后是项目本身,同时也跳过空格和逗号。 我尝试过以下方法:
Scanner input = new Scanner(System.in);
input.useDelimeter(",|\\s");
while(input.hasNext()){
int numItems = input.nextInt();
String item = input.next();
// create object and add to object array
}
哪个适用于第一次迭代(1个苹果),但在第二个类型不匹配时失败。任何人都可以建议修复或替代解决方案吗?
谢谢!
答案 0 :(得分:2)
,|\\s
声明了两个单独的分隔符。这些分隔符可以在文本"apple, 3"
中匹配两次:
apple
3之前的空间
苹果,3 ^^ 12所以我们将这个文本分成两个独立的(中间)位置,这意味着我们将它分成3个标记:
"apple"
,""
,"3"
。 在下一次迭代中(在调用消耗input.next()
的{{1}}之后),您正在调用apple
扫描程序尝试将第二个令牌解析为int,但由于它找到空字符串,因此它会抛出异常。
其中一个解决方案是将input.nextInt()
或[space]
视为单个分隔符。你可以通过逗号选择来实现它:
,[space]
演示:
input.useDelimiter(",?\\s");
输出:
Scanner input = new Scanner("1 apple, 3 bananas, 2 pears");
input.useDelimiter(",?\\s");
while(input.hasNext()){
int numItems = input.nextInt();
System.out.println(numItems);
String item = input.next();
System.out.println(item);
System.out.println("----");
}
答案 1 :(得分:0)
您可以使用分隔符","来填充输入字符串。使用trim()
方法后得到以下输出。
1个苹果
3个香蕉
2梨
以下是代码:
String [] array1 = input.nextLine().split(",");
for(int i=0; i<array1.length; i++){
System.out.println(array1[i].trim());
}
编辑:您可以使用分隔符for loop
进一步拆分space
内的字符串,以获得所需的输出。