查找字符串中的所有数字

use*_*011 21 java string algorithm

例如,我输入了字符串:" qwerty1qwerty2 ";

作为输出我想[1,2].

我目前的实施如下:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但经过仔细检查后,我忽略了几点:

  1. 一些代码行重复两次.

  2. 我用List.我认为这不是一个好主意,更好地使用数组.

所以你怎么看?

你能提供一些建议吗?

Max*_*tin 55

使用RepalceAll

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

输出:

[1, 2]
Run Code Online (Sandbox Code Playgroud)

[编辑]

如果要包含-ae减号,请添加-?:

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

输出:

[-1, -2, 455, 0, 4]
Run Code Online (Sandbox Code Playgroud)

描述

[^-?0-9]+
Run Code Online (Sandbox Code Playgroud)
  • + 在一次和无限次之间,尽可能多次,根据需要回馈
  • -? 其中一个字符" - ?"
  • 0-9 "0"和"9"之间的字符


Ton*_*oni 5

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();
}
Run Code Online (Sandbox Code Playgroud)

是一种正则表达式解决方案。