2016-02-27 103 views
0

在构建一个android应用程序中,我想从收件箱消息中仅提取数值(Rs.875)并将它们全部添加。 我该怎么做,请给点意见。如何从字符串中提取数字值

示例:消息将如下所示 - 1>为9055668800充值Rs.196成功。使用免费应用即时充值预付费手机。 2>嗨,我们已收到付款2000.000与ref.no.NF789465132。敬请期待,同时我们确认您的预订。

我只能从文本中计算出金额。

+0

要提取的所有数值或只是一个数值? – Mrunal

+0

@Mrunal只是所有消息的金额(Rs.200),我必须将所有这些金额相加并生成一个总金额。 – Prathik

回答

1

您可以这样做:您可以使用Regex,如"(?<=Rs.)\\d+[\\.\\d]*"来获取问题中提问的金额。 我只能从文本中计算出金额。

String message = "Recharge of Rs.196 for 9055668800 is successful. Recharge prepaid mobile instantly using freecharge app. hi, we have received payment of Rs.2000.00 with ref.no.NF789465132. Stay tuned while we confirm your booking."; 
Pattern pattern = Pattern.compile("(?<=Rs.)\\d+[\\.\\d]*"); 
Matcher matcher = pattern.matcher(message); 
double sum = 0; 
while (matcher.find()) { 
    String digit = matcher.group(); 
    System.out.println("digit = " + digit); 
    sum += Double.parseDouble(digit); 
} 
System.out.println("sum = " + sum); 

而且它的出放:

digit = 196 
digit = 2000.00 
sum = 2196.0 
+0

简单而完美不像我的回答 – Pragnani

+0

@PragnaniKinnera谢谢先生! –

+0

@BahramdunAdil你的问题是什么?为什么你保持低调投票的其他答案?这是荒唐的。 – user2004685

1

这里是一个没有正则表达式:

String[] messageParts = message.split(" "); 
double sum = 0; 

for (String messagePart : messageParts) { 
    if (messagePart.startsWith("Rs.")) { 
     sum += Double.parseDouble(messagePart.substring(messagePart.indexOf("Rs.") + 3)); 
    } 
} 
System.out.println("Sum: " + sum); 

,输出是

总:2196.0

-1

如果您只想从给定的字符串中提取充值金额,那么您可以使用正则表达式,如Rs.[0-9.]+。然后可以将它解析为整数或双精度来总结它。

下面是一个简单的代码片段:

public static void main (String[] args) 
{ 
    String str = "Recharge of Rs.196.00 for 9055668800 is successful."; 
    Pattern r = Pattern.compile("Rs.[0-9.]+"); 
    Matcher m = r.matcher(str); 
    double sumTotal = 0; 
    if (m.find()) { 
     System.out.println("Amount: " + m.group(0).substring(3)); 
     sumTotal += Double.parseDouble(m.group(0).substring(3)); 
    } 
} 

输出:

Amount: 196.00 
+0

这是最好的解决方案,但您可以使用'while'循环来代替'if'子句来检查所有正确捕获的事件。 –

+0

这个答案没有意义。它应该被写为评论。 –

+0

@Praveen真的吗?那么其余的答案是如何有意义的。 – user2004685