查找字符串中的所有数字

例如,我输入了字符串:“ 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 digits = new ArrayList(); 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); } } } 

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

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

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

所以你怎么看?

你能提供什么建议吗?

使用RepalceAll

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

输出:

 [1, 2] 

[编辑]

如果你想包括- ae减去,添加-?

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

输出:

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

描述

 [^-?0-9]+ 
  • +在一次和无限次之间,尽可能多次,根据需要回馈
  • -? 其中一个字符“ – ?”
  • 0-9 “0”和“9”之间范围内的字符
 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(); } 

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

试试这段代码

 String s = "qwerty1qwerty2"; for(int i=0;i