26

For example, I have input String: "qwerty1qwerty2";

As Output I would like have [1,2].

My current implementation below:

import java.util.ArrayList;
import java.util.List;

public class Test1 {

    public static void main(String[] args) {
        String inputString = args[0];
        String digitStr = "";
        List<Integer> digits = new ArrayList<Integer>();

        for (int i = 0; i < inputString.length(); i++) {
            if (Character.isDigit(inputString.charAt(i))) {
                digitStr += inputString.charAt(i);
            } else {
                if (!digitStr.isEmpty()) {
                    digits.add(Integer.parseInt(digitStr));
                    digitStr = "";
                }
            }
        }
        if (!digitStr.isEmpty()) {
            digits.add(Integer.parseInt(digitStr));
            digitStr = "";
        }

        for (Integer i : digits) {
            System.out.println(i);
        }
    }
}

But after double check I dislake couple points:

  1. Some lines of code repeat twice.

  2. I use List. I think it is not very good idea, better using array.

So, What do you think?

Could you please provide any advice?

Ani Menon
  • 27,209
  • 16
  • 105
  • 126
user471011
  • 7,104
  • 17
  • 69
  • 97

3 Answers3

69

Use replaceAll:

String str = "qwerty1qwerty2";      
str = str.replaceAll("[^0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));

Output:

[1, 2]

[EDIT]

If you want to include - a.e minus, add -?:

String str = "qwerty-1qwerty-2 455 f0gfg 4";      
str = str.replaceAll("[^-?0-9]+", " "); 
System.out.println(Arrays.asList(str.trim().split(" ")));

Output:

[-1, -2, 455, 0, 4]

Description

[^-?0-9]+
  • + Between one and unlimited times, as many times as possible, giving back as needed
  • -? One of the characters “-?”
  • 0-9 A character in the range between “0” and “9”
Spectric
  • 30,714
  • 6
  • 20
  • 43
Maxim Shoustin
  • 77,483
  • 27
  • 203
  • 225
6
import java.util.regex.Matcher;
import java.util.regex.Pattern;

...

Pattern pattern = Pattern.compile("[0-9]+"); 
Matcher matcher = pattern.matcher("test1string1337thingie");

// Find all matches
while (matcher.find()) { 
  // Get the matching string  
  String match = matcher.group();
}

Is one regexp solution.

Toni
  • 273
  • 3
  • 10
  • Actually, let me check if the pattern is correct usage here, just quickly googled and improvised. Haven't used java nor regexp in a while. – Toni Nov 18 '12 at 13:29
  • Yes, it matches. Just add results to some container of your choice. – Toni Nov 18 '12 at 13:49
2

try this code

String s = "qwerty1qwerty2";
for(int i=0;i<s.length();i++)
{
   if(Character.isDigit(s.charAt(i)))
   System.out.print(s.charAt(i)+"  ");
}
scanE
  • 332
  • 4
  • 19