web-dev-qa-db-fra.com

Comment ignorer la casse lors de l'utilisation de beginWith et de endsWith en Java?

Voici mon code:

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 (

J'aimerais laisser à l'utilisateur une certaine latitude quant à la façon dont il peut entrer les commandes, des choses comme: en haut à droite, en haut à droite, en haut à droite, en haut à gauche, etc. À cette fin, j'essaie, enfin if (, vérifiez si cutInput commence par "top" ou "up" ET vérifiez si cutInput se termine par "left" ou "right", tout en étant insensible à la casse. Est-ce possible?

L'objectif final de ceci est de permettre à l'utilisateur de choisir, dans une ligne d'entrée, l'une des quatre orientations d'un triangle. C'était la meilleure façon de penser à cela, mais je suis encore assez nouveau dans la programmation en général et je compliquerais peut-être les choses. Si je le suis et qu'il s'avère qu'il existe un moyen plus simple, faites-le moi savoir.

27
Matao Gearsky

Comme ça:

aString.toUpperCase().startsWith("SOMETHING");
aString.toUpperCase().endsWith("SOMETHING");
45
Óscar López

La réponse acceptée est fausse. Si vous regardez l'implémentation de String.equalsIgnoreCase(), vous découvrirez que vous devez comparer les versions en minuscules et en majuscules des chaînes avant peut renvoyer de manière concluante false.

Voici ma propre version, basée sur http://www.Java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm :

/**
 * String helper functions.
 *
 * @author Gili Tzabari
 */
public final class Strings
{
    /**
     * @param str    a String
     * @param prefix a prefix
     * @return true if {@code start} starts with {@code prefix}, disregarding case sensitivity
     */
    public static boolean startsWithIgnoreCase(String str, String prefix)
    {
        return str.regionMatches(true, 0, prefix, 0, prefix.length());
    }

    public static boolean endsWithIgnoreCase(String str, String suffix)
    {
        int suffixLength = suffix.length();
        return str.regionMatches(true, str.length() - suffixLength, suffix, 0, suffixLength);
    }

    /**
     * Prevent construction.
     */
    private Strings()
    {
    }
}
22
Gili

Je faisais un exercice dans mon livre et l'exercice a dit: "Créez une méthode qui teste pour voir si la fin d'une chaîne se termine par" ger ". Écrivez le code à l'endroit où il teste toute combinaison de lettres majuscules et minuscules dans la phrase "ger". "

Donc, fondamentalement, il m'a demandé de tester une phrase dans une chaîne et d'ignorer la casse, donc peu importe si les lettres en "ger" sont en majuscule ou en minuscule. Voici ma solution:

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

}

comme vous pouvez le voir dans le code, j'ai simplement converti la chaîne qu'un utilisateur entrerait en minuscules. Ce ne serait pas grave si chaque lettre alternait entre minuscules et majuscules parce que je l'ai nié.

1
William McDowell