我有以下代码,我想获取1.00和1.04并在一个对象中声明它。但是我遇到了问题,请帮忙。这是我的代码
String body = "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";
String regex="([0-9]+[.][0-9]+)";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(body);
while(matcher.find())
{
String detail = "Airtime";
transUtilsList.add(new TransUtils(detail,+matcher.group(),matcher.group()));
}
我希望第一个matcher.group()捕获第一个浮点数为1.00,第二个matcher.group()捕获第二个浮点数为1.04,但它们都捕获了1.00。我该怎么办?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果字符串中有两个浮点数,则可以创建一个正则表达式,将两个浮点数捕获到两个不同的捕获组中,例如以下正则表达式,
(\d+\.\d+).*(\d+\.\d+)
然后使用matcher.group(1)
和matcher.group(2)
检查修改后的Java代码,
String body = "You have bought USD 1.00 Whatsapp for 784024487. Your new wallet balance is USD 1.04. Happy Birthday EcoCash for turning 7years. Live Life the EcoCash Way.";
String regex = "(\\d+\\.\\d+).*(\\d+\\.\\d+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(body);
while (matcher.find()) {
System.out.println("First float: " + matcher.group(1) + ", Second float: " + matcher.group(2));
}
打印
First float: 1.00, Second float: 1.04
如果字符串中有许多浮点数,则可能需要调整正则表达式以使用.*?
而不是.*
来捕获紧邻的浮点数或捕获它们的方式。
此外,如果将整个模式包含在正则表达式中,则括号是多余的。因此,([0-9]+[.][0-9]+)
和[0-9]+[.][0-9]+
几乎相同,因为当捕获组完全匹配时,您无需使用捕获组。因此,您可以删除它们,并且,在您的代码中,您实际上并没有像我在代码中那样使用组捕获。当您使用matcher.group()
访问匹配项时,它会为您提供完全匹配,而当您使用matcher.group(1)
访问匹配项时,则会为您提供第一个组捕获的文本,但与您的情况一样,matcher.group()
和{ {1}}出于上述原因将是相同的。