Number from string in java

I have something like "ali123hgj". I want to have 123 in integers. how can i do this in java?

+7
java string numbers
source share
6 answers

Use the following RegExp (see http://java.sun.com/docs/books/tutorial/essential/regex/ ):

\d+ 

By:

 final Pattern pattern = Pattern.compile("\\d+"); // the regex final Matcher matcher = pattern.matcher("ali123hgj"); // your string final ArrayList<Integer> ints = new ArrayList<Integer>(); // results while (matcher.find()) { // for each match ints.add(Integer.parseInt(matcher.group())); // convert to int } 
+8
source share
 int i = Integer.parseInt("blah123yeah4yeah".replaceAll("\\D", "")); // i == 1234 

Notice how this will "combine" the numbers from different parts of the lines together into one number. If you only have one number, this still works. If you want only the first number, you can do something like this:

 int i = Integer.parseInt("x-42x100x".replaceAll("^\\D*?(-?\\d+).*$", "$1")); // i == -42 

A regular expression is a bit more complicated, but basically replaces the entire string with the first sequence of digits it contains (with an optional minus sign) before using Integer.parseInt for parsing into an integer.

+11
source share

This is Google Guava #CharMatcher .

 String alphanumeric = "12ABC34def"; String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234 String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef 

If you only need to combine ASCII digits, use

 String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234 

If you only need to combine the letters of the Latin alphabet, use

 String letters = CharMatcher.inRange('a', 'z') .or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef 
+1
source share

You could do this in the following lines:

 Pattern pattern = Pattern.compile("[^0-9]*([0-9]*)[^0-9]*"); Matcher matcher = pattern.matcher("ali123hgj"); boolean matchFound = matcher.find(); if (matchFound) { System.out.println(Integer.parseInt(matcher.group(0))); } 

It easily adapts to several groups of rooms. The code is for orientation purposes only: it has not been tested.

0
source share
 int index = -1; for (int i = 0; i < str.length(); i++) { if (Character.isDigit(str.charAt(i)) { index = i; // found a digit break; } } if (index >= 0) { int value = String.parseInt(str.substring(index)); // parseInt ignores anything after the number } else { // doesn't contain int... } 
0
source share
 public static final List<Integer> scanIntegers2(final String source) { final ArrayList<Integer> result = new ArrayList<Integer>(); // in real life define this as a static member of the class. // defining integers -123, 12 etc as matches. final Pattern integerPattern = Pattern.compile("(\\-?\\d+)"); final Matcher matched = integerPattern.matcher(source); while (matched.find()) { result.add(Integer.valueOf(matched.group())); } return result; 

Entering "asg123d ddhd-2222-33sds --- --- 222 ss --- 33dd 234" leads to this conclusion [123, -2222, -33, -222, -33, 234]

0
source share

All Articles