如何将扫描仪输入拆分为(数字)(带空格的字符串)(数字)

时间:2014-11-03 14:12:38

标签: java arrays split java.util.scanner

非常简单地说,我正在处理的程序要求我分割扫描仪输入(例如:2 Ham和Cheese 5.5)。它应该在杂货订单中读取并将其拆分为三个数组。我应该使用string.split并能够将此输入拆分为三个部分,无论我的中间字符串中是否有空格。

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

示例输出#1

2

苹果

0.9

示例输入#2 :2个更多苹果0.9

示例输出#2

2

更多苹果

0.9

我如何实现这一目标?每当我使用string.split在有空格的地方进行拆分时,当我只需要在数字和字符串之间进行拆分时,它会拆分“更多”和“苹果”。

谢谢。

3 个答案:

答案 0 :(得分:3)

试试这个(自我解释):

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);

按空格分割字符串,因此第一个空格之前的所有内容都是数量,最后一个空格之后的所有内容都是成本,而重新设置之间的任何内容都是名称。

答案 1 :(得分:1)

您可以尝试.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 ...
}

答案 2 :(得分:0)

在您的示例中显而易见的是输入将始终如下: 数量名称价格 所以你可以使用string.split,获取第一个和最后一个数字,并用空格T [2] -t [n-1]

连接其他字符串