非常简单地说,我正在处理的程序要求我分割扫描仪输入(例如: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在有空格的地方进行拆分时,当我只需要在数字和字符串之间进行拆分时,它会拆分“更多”和“苹果”。
谢谢。
答案 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]
连接其他字符串