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
(이 또한 순수에서 정규식으로 처리 할 수 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
로 결과를 반복하는 것보다 큰 개선이 아니지만 다음을 사용하여 상당히 단순화 된 더 복잡한 작업을 수행하려는 경우 더 간단해야합니다. 스트림.