2017-04-06 3 views
1

Gibt es einen beliebigen String, der 0 oder mehr Substrings enthält, die einem regulären Ausdruck entsprechen, wie kann ich die Anzahl der Zeichen in diesem String zählen, die Teil von übereinstimmenden Substrings waren die Regex?Wie zähle ich die Zeichen in einem String, der mit einem bestimmten Regex übereinstimmt?

Beispiel:

ein regulärer Ausdruck gegeben, dass jede E-Mail-Adresse übereinstimmt und die Zeichenfolge „Ich habe zwei E-Mail-Adressen: [email protected] und [email protected]“, würde dies den int-Wert von 32 zurückkehren (die Anzahl der Zeichen in "[email protected]" plus "[email protected]".

Ich bin nicht klar genug, scheint es. Lassen Sie uns so tun, als würden Sie die Anzahl der Zeichen in einem Tweet begrenzen. Sie möchten jedoch zulassen, dass Personen ihre E-Mail-Adresse in den Tweet aufnehmen und als null Zeichen zählen.

Mögliche Methodensignatur der Lösung:

public int lengthOfSubStringsMatchingRegex(String input, String regex) 
+0

Ich weiß, wie man die Länge einer beliebigen Zeichenfolge erhält. –

+0

möglich duplicate von http://stackoverflow.com/questions/2635082/java-counting-of-occurrences-of-a-word-in-a-string –

+0

Nicht ein Duplikat in dem ich nicht nach der Anzahl von fragen Vorkommen eines Strings, ich suche nach der Länge aller Strings, die einem Regex in meinem Eingabe-String entsprechen. Aber diese Frage enthält einige nützliche Informationen dazu. –

Antwort

3

Gerade Schleife über die passenden Gruppen Ihrer Regex und length() verwenden, um die Anzahl der Zeichen zu extrahieren. Füge sie zu deinem Tresen hinzu und das war's.

public int lengthOfSubStringsMatchingRegex(String input, String regex) 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(input); 

    int count = 0; 
    while (m.find()) 
     count += m.group().length(); 

    return count; 
} 

Als Alternative, aber etwas weniger lesbar, können Sie direkt die Offsets verwenden:

count += m.end() - m.start(); 

start() den Startindex des vorherigen Spiels zurück.
Ende() gibt den Offset nach dem letzten übereinstimmenden Zeichen zurück.

Verwandte Themen