java - 使用扫描仪从列表中读取整数和字符串

标签 java

我正在从标准输入读取一个格式化为列表的字符串。我正在使用字符串中的信息来创建对象。

示例输入字符串的格式如下:

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 个苹果),但在第二次迭代中因类型不匹配而失败。任何人都可以建议修复或替代解决方案吗?

谢谢!

最佳答案

,|\\s 声明两个单独的分隔符。这些分隔符可以在文本 "apple, 3" 中匹配两次:

  1. apple 后的逗号
  2. 3 之前有空格

    苹果,3 ^^ 12

因此我们将该文本拆分为两个单独的(中间)位置,这意味着我们将其拆分为 3 个标记:

  • “苹果”
  • "",
  • “3”

在下一次迭代中(调用消耗 appleinput.next() 后),您正在调用 input.nextInt() 扫描仪尝试将第二个标记解析为 int,但由于它发现空字符串,因此抛出异常。

解决方案之一是将[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
apple
----
3
bananas
----
2
pears
----

关于java - 使用扫描仪从列表中读取整数和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624069/

相关文章:

java - 如何在 Java 中获取动态 RadioButton 工具提示?

java - PDF 页面的缩略图 (Java)

java - 如何将bean放入CSS样式按钮

java - Elasticsearch在Java中使用Scroll API

Java for循环制作 Asterisk 矩阵

java - 如何检查列表中的列表是否不为空?

java - 当我非常靠近地点击图片时,文本被识别。它甚至无法识别名片上的文字

java - 基于Codenvy中URI的Java中的getResource

java - Java解析JSON对象+数组

java - 解析时间戳包含时区到Date对象后,Date对象是否包含时区信息