Java 8 kullanarak şunları yapabilirsiniz:
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]
Eğer negatif sayılar yoksa, sen kurtulabilirsiniz replaceAll(ve kullanımda !s.isEmpty()içinde filterböyle düzgün bölünmüş şey sadece var olarak,) 2-34(bu da tamamen de regex ile ele alınabilir split, ancak oldukça karışık).
Arrays.streamOur döner String[]bir içine Stream<String>.
filter-bir sayının parçası olmayanların yanı sıra baştaki ve sondaki boş dizelerden de kurtulur .
mapToInt(Integer::parseInt).toArray()çağrıları parseInther birinde Stringbize bir vermek int[].
Alternatif olarak, Java 9'un aşağıdaki gibi bir şeye izin vermesi gereken bir Matcher.results yöntemi vardır :
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]
Haliyle, ne bunların büyük bir gelişme üzerinde sadece sonuçların üzerinde döngü olduğunu Pattern/ ' Matcherdiğer yanıtlar gösterildiği gibi, ancak önemli ölçüde kullanımı ile basitleştirilmiş daha karmaşık işlemlerle bu takip etmek istiyorsanız daha basit olmalı Canlı Yayınlar.