我有一个问题拆分类似下面的字符串:
43.80USD
我想是能够表达分成具有“43.80”作为第一个元素和“USD”作为第二个阵列。 所以结果会是这样的:
[ “43.80”, “USD”]
我相信有一些方法用正则表达式来做到这一点,但我没有足够的与它精通数字出来我自己。 任何帮助将非常感激。
我有一个问题拆分类似下面的字符串:
43.80USD
我想是能够表达分成具有“43.80”作为第一个元素和“USD”作为第二个阵列。 所以结果会是这样的:
[ “43.80”, “USD”]
我相信有一些方法用正则表达式来做到这一点,但我没有足够的与它精通数字出来我自己。 任何帮助将非常感激。
如果你的字符串的格式是固定的,你可以如下把它分解
String[] currency = "48.50USD".split("(?<=\\d)(?=[a-zA-Z])");
System.out.println("Amount='"+currency[0]+"'; Denomination='"+currency[1]+"'");
// prints: Amount='48.50'; Denomination='USD'
上述正则表达式使用正向后看 (?<=)和正超前 (?=)找到一个分离器(它是零长度的这里)这是前面有一个编号,接着一个字母。
如果你的数据真的看起来像"43.80USD"
那么你可以使用
"43.80USD".split("(?i)(?=[a-z])",2)
(?=[az])
将之前的任何的分裂az
字符 (?i)
将使用正则表达式不区分大小写的,因此也会为工作uSd
["43.80", "U", "S, "D"]
但["43.80", "USD"]
我们需要使用2
。 此正则表达式作品(\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);
}