2014-11-07 34 views
17

Hier ist mein Code:Wie ignoriere ich Groß- und Kleinschreibung bei der Verwendung von startsWith und endsWith in Java?

public static void rightSel(Scanner scanner,char t) 
{ 
    /*if (!stopping)*/System.out.print(": "); 
    if (scanner.hasNextLine()) 
    { 
    String orInput = scanner.nextLine; 
     if (orInput.equalsIgnoreCase("help") 
     { 
      System.out.println("The following commands are available:"); 
      System.out.println(" 'help'  : displays this menu"); 
      System.out.println(" 'stop'  : stops the program"); 
      System.out.println(" 'topleft' : makes right triangle alligned left and to the top"); 
      System.out.println(" 'topright' : makes right triangle alligned right and to the top"); 
      System.out.println(" 'botright' : makes right triangle alligned right and to the bottom"); 
      System.out.println(" 'botleft' : makes right triangle alligned left and to the bottom"); 
     System.out.println("To continue, enter one of the above commands."); 
    }//help menu 
    else if (orInput.equalsIgnoreCase("stop") 
    { 
     System.out.println("Stopping the program..."); 
      stopping = true; 
    }//stop command 
    else 
    { 
     String rawInput = orInput; 
     String cutInput = rawInput.trim(); 
     if (

Ich möchte dem Benutzer einen gewissen Spielraum ermöglichen, wie sie die Befehle eingeben können, Dinge wie: Oben rechts, oben rechts, topright, oben links, usw. Zu diesem Zweck versuche ich, in diesem letzten if (, ob cutInput startet entweder mit "oben" oder "oben" und prüfen, ob cutInput endet entweder mit "links" oder "rechts", alle ohne Berücksichtigung der Groß-und Kleinschreibung. Ist das überhaupt möglich?

Das Endziel ist es, dem Benutzer zu ermöglichen, in einer Eingabezeile aus einer von vier Ausrichtungen eines Dreiecks auszuwählen. Das war der beste Weg, an den ich denken konnte, aber ich bin immer noch ziemlich neu in der Programmierung im Allgemeinen und bin vielleicht etwas komplizierter. Wenn ich bin, und es gibt einen einfacheren Weg, lass es mich wissen.

+0

Verwenden Sie 'command.toLowerCase(). StartsWith (" up ")' und 'command.toLowerCase(). EndsWith (" right ")'. – Tom

Antwort

31

So:

aString.toUpperCase().startsWith("SOMETHING"); 
aString.toUpperCase().endsWith("SOMETHING"); 
+0

Wird '.toUpperCase()' funktionieren, auch wenn die Zeichenfolge nicht alphabetische Zeichen enthält? Weißt du auch, ob diese in einer Bedingungslogik (al?) Operatoren kombiniert werden können? –

+0

@MataoGearsky Es wird natürlich funktionieren. Die nicht alphabetischen Zeichen werden von 'toUpperCase()' einfach ignoriert. Und sicher genug ist, kann die oben mit logischen Operatoren kombiniert werden (und warum nicht? Sie sind nur Boolesche Ausdrücke.) –

+2

Diese Antwort ist falsch. Wenn Sie die Umsetzung von 'String.equalsIgnoreCase sehen()' Sie werden feststellen, dass Sie sowohl Klein- und Groß Versionen der Strings zu vergleichen, bevor Sie abschließend 'false' zurückkehren kann. Siehe meine Antwort unter http://stackoverflow.com/a/38947571/14731. – Gili

11

Die akzeptierte Antwort ist falsch. Wenn Sie die Implementierung von String.equalsIgnoreCase() betrachten, werden Sie feststellen, dass Sie sowohl Kleinbuchstaben und Großbuchstaben Versionen der Strings vergleichen müssen, bevor Sie false abschließend zurückgeben können.

Hier ist meine eigene Version, basierend auf http://www.java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm:

+0

Ist das nur wegen des georgischen Alphabets? – bphilipnyc

+0

@bphilipnyc Richtig. Das ist ein Beispiel, das im 'String'-Quellcode erwähnt wird, aber wir haben keine Ahnung, ob es der einzige ist. Sicher ist sicher. – Gili

+0

Zusätzlich vermeidet diese Methode, Teile des Strings, die nie überprüft werden würden, zu verkleinern und zu kopieren. –

0

ich eine Übung in meinem Buch tat, und die Bewegung sagte, „eine Methode machen, die mit, wenn das Ende einer Zeichenkette endet, um zu sehen testen "Ger." Schreibe den Code an die Stelle, an der er nach einer Kombination aus Groß- und Kleinbuchstaben in der Phrase "ger" sucht.

Also, im Grunde hat er mich gebeten, einen Satz innerhalb einer Zeichenfolge zu testen und den Fall zu ignorieren Es spielt also keine Rolle, ob Buchstaben in "ger" groß oder klein sind. Hier ist meine Lösung:

package exercises; 

import javax.swing.JOptionPane; 

public class exercises 
{ 
    public static void main(String[] args) 
    { 
     String input, message = "enter a string. It will" 
           + " be tested to see if it " 
           + "ends with 'ger' at the end."; 



    input = JOptionPane.showInputDialog(message); 

    boolean yesNo = ends(input); 

    if(yesNo) 
     JOptionPane.showMessageDialog(null, "yes, \"ger\" is there"); 
    else 
     JOptionPane.showMessageDialog(null, "\"ger\" is not there"); 
} 

public static boolean ends(String str) 
{ 
    String input = str.toLowerCase(); 

    if(input.endsWith("ger")) 
     return true; 
    else 
     return false; 
} 

}

, wie Sie aus dem Code sehen können, ich konvertiert einfach die Zeichenfolge, die ein Benutzer würde Eingabe für alle Kleinbuchstaben. Es wäre egal, ob jeder Buchstabe zwischen Groß- und Kleinschreibung wechselt, weil ich das negiert habe.