如何从一个string中提取数字并获取一个int数组?

我有一个stringvariables(基本上是一个数字未指定的英文句子),我想提取所有的数字到一个整数数组。 我想知道是否有正则expression式的快速解决scheme?


我使用肖恩的解决scheme,并稍作修改:

LinkedList<String> numbers = new LinkedList<String>(); Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher(line); while (m.find()) { numbers.add(m.group()); } 
 Pattern p = Pattern.compile("-?\\d+"); Matcher m = p.matcher("There are more than -2 and less than 12 numbers here"); while (m.find()) { System.out.println(m.group()); } 

…打印-212


– ? 匹配领先的负号 – 可选。 \ d匹配一个数字,但是我们需要在Javastring中将\\写为\\ 。 所以,\ d +匹配1个或多个数字。

怎么样使用replaceAll java.lang.String方法:

  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”之间的字符
 Pattern p = Pattern.compile("[0-9]+"); Matcher m = p.matcher(myString); while (m.find()) { int n = Integer.parseInt(m.group()); // append n to list } // convert list to array, etc 

你实际上可以用\ d代替[0-9],但是涉及双反斜杠转义,这使得它更难以阅读。

  StringBuffer sBuffer = new StringBuffer(); Pattern p = Pattern.compile("[0-9]+.[0-9]*|[0-9]*.[0-9]+|[0-9]+"); Matcher m = p.matcher(str); while (m.find()) { sBuffer.append(m.group()); } return sBuffer.toString(); 

这是为了提取保留小数的数字

(([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))

接受的答案检测数字,但不检测格式化的数字,例如2000,也不检测小数,例如4.8。 对于这样的使用-?\\d+(,\\d+)*?\\.?\\d+?

  Pattern p = Pattern.compile("-?\\d+(,\\d+)*?\\.?\\d+?"); List<String> numbers = new ArrayList<String>(); Matcher m = p.matcher("Government has distributed 4.8 million textbooks to 2,000 schools"); while (m.find()) { numbers.add(m.group()); } System.out.println(numbers); 

输出: [4.8, 2,000]

我build议检查ASCII值从string中提取数字假设您有一个inputstring作为myname12345 ,如果您只想提取数字12345您可以通过首先将string转换为字符数组,然后使用下面的psuedocode

 for(int i=0;i<CharacterArray.length;i++) { if(a[i]>=48&&a[i]<=58) System.out.print(a[i]); } 

一旦数字被提取附加到一个数组

希望这可以帮助