( Jawaban 4castle lebih baik daripada yang di bawah ini jika Anda dapat menganggap Java> = 9)
Anda perlu membuat korek api dan menggunakannya untuk menemukan korek api.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("your regular expression here")
.matcher(yourStringHere);
while (m.find()) {
allMatches.add(m.group());
}
Setelah ini, allMatches
berisi kecocokan, dan Anda dapat menggunakan allMatches.toArray(new String[0])
untuk mendapatkan array jika Anda benar-benar membutuhkannya.
Anda juga dapat menggunakan MatchResult
untuk menulis fungsi pembantu untuk mengulangi pertandingan karena Matcher.toMatchResult()
mengembalikan snapshot dari status grup saat ini.
Misalnya, Anda dapat menulis iterator malas untuk membiarkan Anda melakukannya
for (MatchResult match : allMatches(pattern, input)) {
// Use match, and maybe break without doing the work to find all possible matches.
}
dengan melakukan sesuatu seperti ini:
public static Iterable<MatchResult> allMatches(
final Pattern p, final CharSequence input) {
return new Iterable<MatchResult>() {
public Iterator<MatchResult> iterator() {
return new Iterator<MatchResult>() {
// Use a matcher internally.
final Matcher matcher = p.matcher(input);
// Keep a match around that supports any interleaving of hasNext/next calls.
MatchResult pending;
public boolean hasNext() {
// Lazily fill pending, and avoid calling find() multiple times if the
// clients call hasNext() repeatedly before sampling via next().
if (pending == null && matcher.find()) {
pending = matcher.toMatchResult();
}
return pending != null;
}
public MatchResult next() {
// Fill pending if necessary (as when clients call next() without
// checking hasNext()), throw if not possible.
if (!hasNext()) { throw new NoSuchElementException(); }
// Consume pending so next call to hasNext() does a find().
MatchResult next = pending;
pending = null;
return next;
}
/** Required to satisfy the interface, but unsupported. */
public void remove() { throw new UnsupportedOperationException(); }
};
}
};
}
Dengan ini,
for (MatchResult match : allMatches(Pattern.compile("[abc]"), "abracadabra")) {
System.out.println(match.group() + " at " + match.start());
}
hasil panen
a at 0
b at 1
a at 3
c at 4
a at 5
a at 7
b at 8
a at 10