पैटर्न आप आवेदन कर रहे हैं केवल एक लाइन के लिए एक बार दिखाई देता है, तो आप अपने एक Stream<Matcher>
में Stream<String>
, लाइनों है कि नमूने का मिलान को फ़िल्टर और अंत में उन्हें एक सरणी में भंडारण के द्वारा समूह 1 और 2 को निकालने मैप कर सकते हैं।
try (Stream<String> stream = Files.lines(Paths.get(""))) {
stream.map(PATTERN::matcher)
.filter(Matcher::find)
.map(m -> new String[] { m.group(1), m.group(2) })
.forEach(a -> System.out.println(Arrays.toString(a)));
} catch (IOException e) {
e.printStackTrace();
}
पैटर्न एक से अधिक समय दिखाई देता है, तो हम Matcher से अधिक पाश करने की आवश्यकता होगी find()
जब तक रिटर्न false
। इस मामले में, हम
try (Stream<String> stream = Files.lines(Paths.get(""))) {
stream.map(PATTERN::matcher)
.flatMap(m -> {
List<String[]> list = new ArrayList<>();
while (m.find()) {
list.add(new String[] { m.group(1), m.group(2) });
}
return list.stream();
})
.forEach(a -> System.out.println(Arrays.toString(a)));
जावा 9 में, वहाँ एक नई विधि Matcher.results()
परिणामों की एक Stream<MatchResult>
को पुनः प्राप्त करने में हो सकता है हो सकता था। हम इसे 2 अलग find
और group
संचालन के बजाय यहां उपयोग कर सकते हैं।
क्या यह पैटर्न लाइन में 1 से अधिक बार प्रदर्शित हो सकता है? – Tunaki
मैं exatcly नहीं जानता लेकिन मैं बात - हाँ;) – Tobias
'.filter (एस -> PATTERN.matcher (s) .find())' .filter (PATTERN.asPredicate()) के बराबर है ... – Holger