【问题标题】:How to split scanner input into (Number) (String With Spaces) (Number)如何将扫描仪输入拆分为(数字)(带空格的字符串)(数字)
【发布时间】:2014-11-03 14:12:37
【问题描述】:

简单地说,我目前正在处理的程序要求我拆分扫描仪输入(例如:2 Ham and Cheese 5.5)。它应该按杂货订单读取并将其拆分为三个数组。我应该使用 string.split 并能够将此输入分成三部分,而不管中间字符串中的空格如何。

示例输入 #1:2 个苹果 0.9

示例输出 #1

2

苹果

0.9

示例输入 #2:还有 2 个苹果 0.9

示例输出 #2

2

更多苹果

0.9

我如何做到这一点?每当我使用 string.split 在有空格的地方进行拆分时,当我只需要在数字和字符串之间拆分时,它就会拆分“more”和“apples”。

谢谢。

【问题讨论】:

    标签: java arrays split java.util.scanner


    【解决方案1】:

    试试这个(不言自明):

    String str = "2 More Apples 0.9";
    int fistSpaceIndex = str.indexOf(" ");
    int lastSpaceIndex = str.lastIndexOf(" ");
    int quantity = Integer.parseInt(str.substring(0, fistSpaceIndex));
    String name = str.substring(fistSpaceIndex, lastSpaceIndex);
    Double cost = Double.parseDouble(str.substring(lastSpaceIndex));
    System.out.println(quantity + " " + name + " " + cost);
    

    按空格分割字符串,所以第一个空格之前的所有内容都是数量,最后一个空格之后的所有内容都是成本,而中间的内容是名称。

    【讨论】:

      【解决方案2】:

      您可以尝试.split("[^0-9]+"),但这会丢弃数字之间的信息。

      我猜你应该改用Matcher,它是从Pattern 派生的,如下所示:

      Pattern p = Pattern.compile("([0-9.]+)([^0-9]+)([0-9.]+)");
      Matcher m = p.matcher("30 apples and pears 0.29");
      if (m.matches()) {
         String number = m.group(1);
         String product = m.group(2);
         String price = m.group(3);
         // Continue parsing numbers ...
      }
      

      【讨论】:

        【解决方案3】:

        在您的示例中很明显,输入将始终是这样的: 数量名称价格 所以你可以使用 string.split ,获取第一个和最后一个数字,并用空格连接其他字符串 T[2]-t[n-1]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-23
          • 1970-01-01
          相关资源
          最近更新 更多