【问题标题】: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]