জাভা 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 সঙ্গে পরিচালনা করা যায় split
, কিন্তু এটা মোটামুটি জটিল)।
Arrays.stream
আমাদের চালু String[]
পরিণত করে Stream<String>
।
filter
নেতৃস্থানীয় এবং পিছনে থাকা খালি স্ট্রিংগুলির পাশাপাশি কোনও -
সংখ্যার অংশ নয় এমন কোনও বিষয় থেকে মুক্তি পেয়ে যায় ।
mapToInt(Integer::parseInt).toArray()
আমাদের একটি দিতে parseInt
প্রতিটি কল ।String
int[]
বিকল্পভাবে, জাভা 9 এর একটি ম্যাচার.প্রসূত পদ্ধতি রয়েছে, যা এর মতো কিছু করার অনুমতি দেয়:
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
যেমন ফলাফলগুলি দেখানো হয়েছে কেবলমাত্র লুপিংয়ের চেয়ে এগুলির কোনওটিই বৃহত উন্নতি নয়, তবে আপনি যদি আরও জটিল ক্রিয়াকলাপগুলির সাথে এটি অনুসরণ করতে চান যা ব্যবহারের সাথে উল্লেখযোগ্যভাবে সরলীকৃত হয় তা সহজ হওয়া উচিত it স্রোত বইবে।