使用Java 8,您可以执行以下操作:
String str = "There 0 are 1 some -2-34 -numbers 567 here 890 .";
int[] ints = Arrays.stream(str.replaceAll("-", " -").split("[^-\\d]+"))
.filter(s -> !s.matches("-?"))
.mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
如果您没有负数,则可以摆脱replaceAll(并!s.isEmpty()在中使用filter),因为这仅仅是为了正确分割类似的东西2-34(这也可以使用regex in来处理split,但这相当复杂)。
Arrays.stream把我们String[]变成一个Stream<String>。
filter删除开头和结尾的空字符串以及任何-不属于数字的字符串。
mapToInt(Integer::parseInt).toArray()呼吁parseInt每个String给我们一个int[]。
另外,Java 9具有Matcher.results方法,该方法应允许以下内容:
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("There 0 are 1 some -2-34 -numbers 567 here 890 .");
int[] ints = m.results().map(MatchResults::group).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
既然这样,这些都不是一个很大的进步了刚刚遍历的结果Pattern/ Matcher如图所示其他的答案,但如果你想用更复杂的操作,这些操作与使用的显著简化跟进它应该是简单流。