2014-11-03 53 views
0

简而言之,我目前正在使用的程序要求我分割我的扫描仪输入(例如:2 Ham和Cheese 5.5)。它应该按照杂货店订单来阅读,并将其分成三个数组。我应该使用string.split,并且能够将此输入分成三部分,而不管中间字符串中的空格。如何将扫描仪输入分割为(数字)(字符串与空格)(数字)

实施例输入#1:2苹果0.9

实施例输出#1

苹果

0.9

示例输入#2 :2个月再苹果0.9

示例输出#2

更多苹果

0.9

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

谢谢。

回答

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

分割字符串的空间,那么之前的一切第一个空间是数量,在最后一个空间之后的所有东西都是成本,而改变之间的任何东西都是名称。

0

它在你的例子不是明摆着的投入将永远是这样的: 控管数量名称价格 这样你就可以使用string.split,获得第一个和最后一个号码,concatinate其他弦乐与空间T [ 2] -t [n-1]