2014-11-07 13 views
17

Ecco il mio codice:Come si ignora il caso quando si utilizza startsWith e 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 (

mi piacerebbe permettere all'utente certo margine di manovra per come possono immettere i comandi, le cose come: In alto a destra, in alto a destra, topright, in alto a sinistra, ecc A tal fine, sto provando a, a quell'ultimo if (, controllare se cutInput inizia con "top" o "up" E verificare se cutInput termina con "left" o "right", il tutto senza maiuscole/minuscole. È possibile?

L'obiettivo finale di questo è consentire all'utente, in una riga di input, di scegliere uno dei quattro orientamenti di un triangolo. Questo era il modo migliore in cui potessi pensare di farlo, ma sono ancora abbastanza nuovo alla programmazione in generale e potrebbe complicare le cose. Se lo sono, e si trasforma in un modo più semplice, faccelo sapere.

+0

Utilizzare 'command.toLowerCase(). StartsWith (" up ")' e 'command.toLowerCase(). EndsWith (" right ")'. – Tom

risposta

31

Ti piace questa:

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

'.toUpperCase()' funziona anche se la stringa contiene caratteri non alfabetici? Inoltre, sai se questi possono essere combinati in operatori logici (al?) Condizionali? –

+0

@MataoGearsky Funzionerà, ovviamente. I caratteri non alfabetici saranno semplicemente ignorati da 'toUpperCase()'. E sicuramente, quanto sopra può essere combinato con operatori logici (e perché no? Sono solo espressioni booleane.) –

+2

Questa risposta è sbagliata. Se si considera l'implementazione di 'String.equalsIgnoreCase()' si scoprirà che è necessario confrontare entrambe le versioni minuscole e maiuscole delle stringhe prima di poter restituire in modo definitivo 'false'. Vedi la mia risposta su http://stackoverflow.com/a/38947571/14731. – Gili

11

La risposta accettata è sbagliato. Se si guarda all'implementazione di String.equalsIgnoreCase(), si scoprirà che è necessario confrontare sia versioni minuscole e maiuscole delle stringhe prima di poter restituire in modo conclusivo false.

Qui è la mia versione, basata su http://www.java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm:

+0

E 'solo per via dell'alfabeto georgiano? – bphilipnyc

+0

@bphilipnyc corretto. Questo è un esempio menzionato dal codice sorgente di 'String', ma non abbiamo idea se sia l'unico. Meglio prevenire che curare. – Gili

+0

Inoltre, questo metodo evita il minuscolo e la copia di parti della stringa che non verrebbero mai verificate. –

0

stavo facendo un esercizio nel mio libro e l'esercizio disse: "Fare un metodo che mette alla prova per vedere se la fine di una stringa termina con 'ger.' Scrivi il codice dove prova per qualsiasi combinazione di lettere maiuscole e minuscole nella frase "ger". "

Quindi, in sostanza, mi ha chiesto di testare una frase all'interno di una stringa e di ignorare il caso quindi non importa se le lettere in "ger" sono maiuscole o minuscole. Qui è la mia soluzione:

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; 
} 

}

come si può vedere dal codice, ho semplicemente convertito la stringa che un utente avrebbe input per tutto minuscolo. Non avrebbe importanza se ogni lettera fosse alternata tra lettere minuscole e lettere maiuscole perché l'ho negata.

Problemi correlati