Java正则表达式从字符串中拆分为double

时间:2013-06-18 15:56:48

标签: java regex string split double

我遇到了分割类似以下字符串的问题:

43.80USD

我想要的是能够将表达式拆分为一个数组,其中第一个元素为“43.80”,第二个元素为“USD”。所以结果会是这样的:

[“43.80”,“USD”]

我确信有一些方法可以用正则表达式做到这一点,但我不够精通它自己搞清楚。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果你的字符串格式是固定的,你可以按如下方式拆分

String[] currency = "48.50USD".split("(?<=\\d)(?=[a-zA-Z])");
System.out.println("Amount='"+currency[0]+"'; Denomination='"+currency[1]+"'");
// prints: Amount='48.50'; Denomination='USD'

上面的正则表达式使用 positive look-behind (?&lt; =)和 positive lookahead (?=)来查找分隔符(这里有零长度),前面有一个数字,后跟一个字母。

答案 1 :(得分:1)

如果您的数据真的像"43.80USD",那么您可以使用

"43.80USD".split("(?i)(?=[a-z])",2)
  • (?=[a-z])将在a-z个字符
  • 之前拆分
  • (?i)会使用正则表达式不区分大小写,因此它也适用于uSd
  • 第二个参数是结果数组的最大大小,因为您不需要["43.80", "U", "S, "D"]["43.80", "USD"]我们需要使用2

答案 2 :(得分:0)

此正则表达式有效(\d*\.\d*)([a-zA-Z]*)。第1组将是金额,包括小数。第2组将是美元或其他货币名称。请注意,此正则表达式只需要一个小数点,其他一切都是可选的。所以这也匹配:“45123.15542ABCDEFG”。第1组为45123.15542,第2组为ABCDEFG。如果您需要更严格的要求,请告诉我它们是什么,并将其放入。否则您的代码将如下所示:

Pattern p = Pattern.compile("(\\d*\\.\\d*)([a-zA-Z]*)");//Note the double \\ to escape twice.
Matcher m = p.matcher("43.80USD");
String amount, type;
if(m.matches){
    amount = m.group(1);
    type = m.group(2);
}