如何从一个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()); }
…打印-2
和12
。
– ? 匹配领先的负号 – 可选。 \ 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]); }
一旦数字被提取附加到一个数组
希望这可以帮助