2016-11-08 3 views
1

Wie kann ich überprüfen, das JTextField nur Groß- und Kleinbuchstaben und '-' mit Regex, und fügen Sie das dann zu einer ArrayList? Ich habe überall nachgesehen und die meisten Orte sagen das Gleiche, aber ich kann nicht herausfinden, was ich vermisse. Hier ist der Code-Schnipsel, die schief gehen ist:Wie kann ich überprüfen, dass das JTextField nur Groß- und Kleinbuchstaben enthält und '-' mit Regex

public static void AddArray(ArrayList arrayWords, JTextField textFieldEntry, JLabel labelWords){ 
    String textFieldValueRed = textFieldEntry.getText(); 

//Check that textfield only contains letters and '-' 
    Pattern p= Pattern.compile("[a-zA-Z-]"); 
    Matcher m = p.matcher(textFieldEntry.toString()); 
    boolean b = m.matches(); 
    if (b==true){ 
     arrayWords.add(textFieldEntry.getText().toString()); 
     labelWords.setText("'"+textFieldEntry.getText()+"' was added to list."); 
    } 
    else{ 
     labelWords.setText("The string ‘"+textFieldEntry.getText()+"’ was not added to the list as it is not a valid word."); 
    } 
} 
+0

Fragen Sie nicht einfach nach einer Lösung, versuchen Sie es selbst und Sie werden wahrscheinlich etwas lernen! Ich bevorzuge diese Seite, Sie könnten es zumindest versuchen: https://regex101.com/ –

Antwort

2

Sie haben + für atleast einen oder mehrere Werte verwenden

Pattern.compile("[a-zA-Z-]+"); 

sonst diese [a-zA-Z-] als true übereinstimmen, wenn nur einzelne Zeichen bedeuten, ist

[] passt nur einen einzelnen Wert, der darin definiert ist

und

+ bedeutet, dass es einen oder mehrere Werte geben wird, damit es 1 oder mehr Vorkommen des vorhergehenden Tokens entspricht.

Update: Das andere Problem ist, benötigen Sie einen String Wert, dh textFieldValueRed verwenden, die Sie geholt getText() Funktion nicht textFieldEntry.toString() verwenden, da diese textFieldEntry.toString() wird zusammen mit Hash-Code, so folgen Sie diesem

Matcher m = p.matcher(textFieldEntry.getText()); 
einen etwas unerwarteten Wert dh Klasse Unterschrift geben

vollständige Code

public static void AddArray(ArrayList arrayWords, JTextField textFieldEntry, JLabel labelWords){ 

    Pattern p = Pattern.compile("[a-zA-Z-]+"); 
    Matcher m = p.matcher(textFieldEntry.getText()); 
    if (m.matches()){ 
     arrayWords.add(textFieldEntry.getText()); 
     labelWords.setText("'"+textFieldEntry.getText()+"' was added to list."); 
    } 
    else{ 
     labelWords.setText("The string ‘"+textFieldEntry.getText()+"’ was not added to the list as it is not a valid word."); 
    } 
} 

oder Sie tun dies, ohne dass Pattern Objekt erstellen

if (textFieldEntry.getText().trim().matches("[a-zA-Z-]+")){ 
     arrayWords.add(textFieldEntry.getText()); 
     labelWords.setText("'"+textFieldEntry.getText()+"' was added to list."); 
    } 
    else{ 
     labelWords.setText("The string ‘"+textFieldEntry.getText()+"’ was not added to the list as it is not a valid word."); 
    } 
+0

Wenn Sie nicht möchten, dass das Flag 'b' für später verwendet wird, können Sie einfach 'if (m.matches()) verwenden ' –

+0

Ich habe beide Ihre vorgeschlagenen Änderungen gemacht, aber es gibt immer noch die" sonst "-Option, wenn der Benutzer 'lol' – Eishknaar

+0

@Eishknaar Erwähnung der Eingabe, die Sie verwenden, da diese kein Problem sein sollte mit diesem Regex gemäß Ihren Anforderungen erwähnt in post plus update den aktuellen Code, den Sie verwenden –

Verwandte Themen