Extract digits from string - StringUtils Java

JavaStringApache StringutilsString Utils

Java Problem Overview


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!

Java Solutions


Solution 1 - Java

Use this code numberOnly will contain your desired output.

   String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");

Solution 2 - Java

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

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

Solution 3 - Java

Just one line:

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

Solution 4 - Java

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 a String. Note that calling Integer.parseInt on the result may be many times faster than calling nextInt().

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

Solution 5 - Java

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

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

Solution 6 - Java

try this :

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

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

Solution 7 - Java

Guava's CharMatcher class extracts Integers from a String.

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

Yields:

1010

Solution 8 - Java

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"));
	}
 }

Solution 9 - Java

You can use the following regular expression.

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

Solution 10 - Java

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

	    String[] str = line.split(regex);
	    
	    System.out.println(str[1]);

Solution 11 - Java

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

Solution 12 - Java

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"));
}

Solution 13 - Java

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);

Solution 14 - Java

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);
	
}

Solution 15 - Java

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);

Solution 16 - Java

If you have access to org.apache.commons.lang3. you can use StringUtils.getDigits method

public static void main(String[] args) {
	String value = "helloThisIsA1234Sample";
	System.out.println(StringUtils.getDigits(value));
}
output: 12345

Solution 17 - Java

   `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

Solution 18 - Java

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);

Solution 19 - Java

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]))

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNinaNaView Question on Stackoverflow
Solution 1 - Javauser1999257View Answer on Stackoverflow
Solution 2 - JavaMichael BavinView Answer on Stackoverflow
Solution 3 - JavarnrneverdiesView Answer on Stackoverflow
Solution 4 - JavaMarimuthu MadasamyView Answer on Stackoverflow
Solution 5 - Javauser1181445View Answer on Stackoverflow
Solution 6 - JavaShessukyView Answer on Stackoverflow
Solution 7 - JavaPrasannaView Answer on Stackoverflow
Solution 8 - JavaPAAView Answer on Stackoverflow
Solution 9 - JavaSivasubramaniam ArunachalamView Answer on Stackoverflow
Solution 10 - JavaAz.MaYoView Answer on Stackoverflow
Solution 11 - Javasendon1982View Answer on Stackoverflow
Solution 12 - Javasendon1982View Answer on Stackoverflow
Solution 13 - JavaAzadView Answer on Stackoverflow
Solution 14 - JavaRishabh AgarwalView Answer on Stackoverflow
Solution 15 - JavaDinesh KesavanView Answer on Stackoverflow
Solution 16 - JavaCloverView Answer on Stackoverflow
Solution 17 - JavaAmol NileView Answer on Stackoverflow
Solution 18 - JavaGunapati AkhilchandraView Answer on Stackoverflow
Solution 19 - Javarameshbabu reddyView Answer on Stackoverflow