Es gibt einen String. Wie kann ich überprüfen, ob er y- und f-Zeichen enthält? Der dunkelste Weg ist:
Programm 1: Ich weiß, ob, für Anweisungen und charAt()
class Test{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; char x='y'; char y='f'; boolean result=false; for(int i=0;i<str.length;i++){ char z=str.charAt(i); //System.out.println(z); if(x==z||y==z) { result=true; break; } else result=false; } System.out.println(result); } }
Es scheint intuitiv, aber diese Methode ist schwer zu handhaben mit komplexer Arbeit. Fragen Sie beispielsweise ab, ob in einem Textabschnitt „ist“ enthalten ist. Gibt es ein Ding oder ein Klingeln usw. Es ist ein scheußlicher Job.
Java's java.util.regex-Paket
Gemäß der objektorientierten Idee wird die Zeichenfolge, die Sie abfragen möchten, z. B. is, thing oder ting, in ein Objekt gekapselt, und dieses Objekt ist es Wird als Vorlage verwendet, um einen Textabsatz abzugleichen, der natürlicher wird. Als Vorlage dient der reguläre Ausdruck, der weiter unten besprochen wird. Ignorieren wir die Komplexität und schauen wir uns ein Beispiel an: Programm 2: Ich verstehe es nicht. Können wir zuerst einen Blick darauf werfen?
import java.util.regex.*; class Regex1{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean result=m.find(); System.out.println(result); } }
Wenn str mit regEx übereinstimmt, ist das Ergebnis wahr, andernfalls ist es falsch. Wenn Sie bei der Suche die Groß- und Kleinschreibung ignorieren möchten, können Sie schreiben:
Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
Obwohl ich Pattern (template, pattern ) und die Details des Matchers (Matcher), das Programm fühlt sich komfortabler an. Wenn Sie zuerst is abfragen und dann thing oder ting abfragen, müssen wir nur das Vorlagenmuster ändern, anstatt if-Anweisungen und for-Anweisungen oder charAt zu berücksichtigen () .
1. Schreiben Sie eine spezielle Zeichenfolge – einen regulären Ausdruck wie a|f.
2. Kompilieren Sie den regulären Ausdruck in eine Vorlage: p
3. Verwenden Sie Vorlage p, um die Zeichenfolge str abzugleichen.
Die Idee ist klar, jetzt wollen wir sehen, wie Java damit umgeht (Java-Programmierer können diese Klassen erst ab JDK1.4 verwenden.
Musterklasse und Suche
①öffentliche Abschlussklasse Java .util.regex.Pattern ist ein kompilierter Ausdruck eines regulären Ausdrucks. Die folgende Anweisung erstellt ein Pattern-Objekt und weist es dem Handle p zu: Pattern p=Pattern.compile(regEx);
Interessanterweise Die Musterklasse ist eine endgültige Klasse und ihr Konstruktor ist privat. Vielleicht hat Ihnen jemand etwas über Entwurfsmuster gesagt, oder Sie können die relevanten Informationen selbst überprüfen. Die Schlussfolgerung hier ist: Die Musterklasse kann nicht vererbt werden und wir können die Musterklasse nicht erstellen durch new. Object.
Daher werden in der Pattern-Klasse zwei überladene statische Methoden bereitgestellt, deren Rückgabewert das Pattern-Objekt (Referenz) ist, wie zum Beispiel:
public static Pattern compile(String regex) { return new Pattern(regex, 0); }<.> Natürlich können wir das Handle der Pattern-Klasse deklarieren, z. B. Pattern p=null; ②p.matcher(str) bedeutet, dass die Vorlage p verwendet wird, um einen Matcher für die Zeichenfolge str zu generieren , und sein Rückgabewert ist Warum ist dies ein Verweis auf die Matcher-Klasse? Kann es der natürlichen Idee nach nicht einen booleschen Wert zurückgeben? Wir können einfach die folgende Methode verwenden:
Kopieren Sie den Code wie folgt:
Eigentlich ist die Handleless-Methode zum Zusammenführen von drei Anweisungen oft keine gute Methode. Schauen wir uns zuerst diesen seltsamen