[java] Extract digits from string - StringUtils Java

I have a String and I want to extract the (only) sequence of digits in the string.

Example: helloThisIsA1234Sample. I want the 1234

It's a given that the sequence of digits will occur only once within the string but not in the same position.

(for those who will ask, I have a server name and need to extract a specific number within it)

I would like to use the StringUtils class from Apache commomns.

Thanks!

This question is related to java string apache-stringutils string-utils

The answer is


Use a regex such as [^0-9] to remove all non-digits.

From there, just use Integer.parseInt(String);


You can try this:

  String str="java123java456";
  String out="";
  for(int i=0;i<str.length();i++)
  {
    int a=str.codePointAt(i);
     if(a>=49&&a<=57)
       {
          out=out+str.charAt(i);
       }
   }
 System.out.println(out);

You can use str = str.replaceAll("\\D+","");


I've created a JUnit Test class(as a additional knowledge/info) for the same issue. Hope you'll be finding this helpful.

   public class StringHelper {
    //Separate words from String which has gigits
        public String drawDigitsFromString(String strValue){
            String str = strValue.trim();
            String digits="";
            for (int i = 0; i < str.length(); i++) {
                char chrs = str.charAt(i);              
                if (Character.isDigit(chrs))
                    digits = digits+chrs;
            }
            return digits;
        }
    }

And JUnit Test case is:

 public class StringHelperTest {
    StringHelper helper;

        @Before
        public void before(){
            helper = new StringHelper();
        }

        @Test
    public void testDrawDigitsFromString(){
        assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
    }
 }

A very simple solution, if separated by comma or if not separated by comma

public static void main(String[] args) {

    String input = "a,1,b,2,c,3,d,4";
    input = input.replaceAll(",", "");

    String alpha ="";
    String num = "";

    char[] c_arr = input.toCharArray();

    for(char c: c_arr) {
        if(Character.isDigit(c)) {
            alpha = alpha + c;
        }
        else {
            num = num+c;
        }
    }

    System.out.println("Alphabet: "+ alpha);
    System.out.println("num: "+ num);

}

Simple python code for separating the digits in string

  s="rollnumber99mixedin447"
  list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))

You can use the following regular expression.

string.split(/ /)[0].replace(/[^\d]/g, '')

        String line = "This order was32354 placed for QT ! OK?";
        String regex = "[^\\d]+";

        String[] str = line.split(regex);

        System.out.println(str[1]);

You can also use java.util.Scanner:

new Scanner(str).useDelimiter("[^\\d]+").nextInt()

You can use next() instead of nextInt() to get the digits as string.

You can check for the presence of number using hasNextInt() on the Scanner.


You can use the following Code to retain Integers from String.

String text="Hello1010";
System.out.println(CharMatcher.digit().retainFrom(text));

Will give you the Following Output

1010


Extending the best answer for finding floating point numbers

       String str="2.53GHz";
       String decimal_values= str.replaceAll("[^0-9\\.]", "");
       System.out.println(decimal_values);

Try this approach if you have symbols and you want just numbers:

    String s  = "@##9823l;Azad9927##$)(^738#";
    System.out.println(s=s.replaceAll("[^0-9]", ""));
    StringTokenizer tok = new StringTokenizer(s,"`~!@#$%^&*()-_+=\\.,><?");
    String s1 = "";
    while(tok.hasMoreTokens()){
        s1+= tok.nextToken();
    }
    System.out.println(s1);

I always like using Guava String utils or similar for these kind of problems:

String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123

You can split the string and compare with each character

public static String extractNumberFromString(String source) {
    StringBuilder result = new StringBuilder(100);
    for (char ch : source.toCharArray()) {
        if (ch >= '0' && ch <= '9') {
            result.append(ch);
        }
    }

    return result.toString();
}

Testing Code

    @Test
    public void test_extractNumberFromString() {
    String numberString = NumberUtil.extractNumberFromString("+61 415 987 636");
    assertThat(numberString, equalTo("61415987636"));

    numberString = NumberUtil.extractNumberFromString("(02)9295-987-636");
    assertThat(numberString, equalTo("029295987636"));

    numberString = NumberUtil.extractNumberFromString("(02)~!@#$%^&*()+_<>?,.:';9295-{}[=]987-636");
    assertThat(numberString, equalTo("029295987636"));
}

try this :

String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");

This means: replace all occurrences of digital characters (0 -9) by an empty string !


   `String s="as234dfd423";
for(int i=0;i<s.length();i++)
 {
    char c=s.charAt(i);``
    char d=s.charAt(i);
     if ('a' <= c && c <= 'z')
         System.out.println("String:-"+c);
     else  if ('0' <= d && d <= '9')
           System.out.println("number:-"+d);
    }

output:-

number:-4
number:-3
number:-4
String:-d
String:-f
String:-d
number:-2
number:-3

Just one line:

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));