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 filter
bö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.stream
Our 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ı parseInt
her birinde String
bize 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
/ ' Matcher
diğ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.