जावा 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[]।
वैकल्पिक रूप से, जावा 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जैसा कि अन्य उत्तरों में दिखाया गया है, लेकिन यह सरल होना चाहिए यदि आप इसे और अधिक जटिल संचालन के साथ पालन करना चाहते हैं जो कि इसके उपयोग के साथ काफी सरल हैं धाराओं।