User3
User3

Reputation: 2535

Replacing digits separated with commas using String.replace("","");

I have a string which looks like following:

Turns 13,000,000 years old

Now i want to convert the digits to words in English, I have a function ready for that however I am finding problems to detect the original numbers (13,000,000) in this case, because it is separated by commas.

Currently I am using the following regex to detect a number in a string:

stats = stats.replace((".*\\d.*"), (NumberToWords.start(Integer.valueOf(notification_data_greet))));

But the above seems not to work, any suggestions?

Upvotes: 1

Views: 709

Answers (4)

AlexR
AlexR

Reputation: 2408

You need to extract the number using a RegEx wich allows for the commas. The most robust one I can think of right now is

\d{1,3}(,?\d{3})*

Wich matches any unsigned Integer both with correctly placed commas and without commas (and weird combinations thereof like 100,000000)
Then replace all , from the match by the empty String and you can parse as usual:

Pattern p = Pattern.compile("\\d{1,3}(,?\\d{3})*"); // You can store this as static final
Matcher m = p.matcher(input);
while (m.find()) { // Go through all matches
    String num = m.group().replace(",", "");
    int n = Integer.parseInt(num);
    // Do stuff with the number n
}

Working example:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        String input = "1,300,000,000";
        Pattern p = Pattern.compile("\\d{1,3}(,?\\d{3})*"); // You can store this as static final
        Matcher m = p.matcher(input);
        while (m.find()) { // Go through all matches
            String num = m.group().replace(",", "");
            System.out.println(num);
            int n = Integer.parseInt(num);
            System.out.println(n);
        }
    }
}

Gives output

1300000000
1300000000

Upvotes: 2

Avinash Raj
Avinash Raj

Reputation: 174696

Try the below regex to match the comma separted numbers,

\d{1,3}(,\d{3})+

Make the last part as optional to match also the numbers which aren't separated by commas,

\d{1,3}(,\d{3})*

Upvotes: 2

Sanjeev
Sanjeev

Reputation: 9946

You can do it with the help of DecimalFormat instead of a regular expression

    DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
    System.out.println(format.parse("10,000,000"));

Upvotes: 2

Dakkaron
Dakkaron

Reputation: 6278

Try this regex:

[0-9][0-9]?[0-9]?([0-9][0-9][0-9](,)?)*

This matches numbers that are seperated by a comma for each 1000. So it will match

10,000,000

but not

10,1,1,1

Upvotes: 2

Related Questions