Comment puis-je ignorer case lorsque j'utilise startsWith et endsWith en Java? [dupliquer]

Cette question a déjà une réponse ici:

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 marge de manœuvre quant à la façon d'entrer les commandes, des choses comme: en haut à droite, en haut à droite, en haut à droite, en haut à gauche, etc. À cette fin, je vais essayer pour, au cours de ce dernier if (, vérifiez si cutInput commence par "haut" ou "haut" et vérifie si cutInput se termine par "Gauche" ou "droite", tout en étant insensible à la casse. Est-ce possible?

L'objectif est de permettre à l'utilisateur d', dans une ligne d'entrée, choisir l'une des quatre orientations d'un triangle. C'était la meilleure façon de le faire, mais je suis encore assez novice dans la programmation en général et je risque de compliquer les choses. Si je le suis, et il s' il y a un moyen plus simple, dites-le-moi.

18
demandé sur Óscar López 2014-11-07 07:51:17

3 réponses

Comme ceci:

aString.toUpperCase().startsWith("SOMETHING");
aString.toUpperCase().endsWith("SOMETHING");
37
répondu Óscar López 2014-11-07 04:55:14

la réponse acceptée est fausse. Si vous regardez la mise en œuvre de String.equalsIgnoreCase() vous allez découvrir que vous avez besoin de comparer versions en minuscules et en majuscules des chaînes avant que vous puissiez retournerfalse.

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()
    {
    }
}
12
répondu Gili 2017-10-19 16:27:14

je faisais un exercice dans mon livre et l'exercice dit, " faire une méthode qui teste pour voir si la fin d'une corde se termine avec 'ger."Ecrire le code à l'endroit où il teste toute combinaison de lettres majuscules et minuscules dans la phrase" ger.'"

donc, en gros, il m'a demandé de tester pour une phrase dans une chaîne et d'ignorer le cas afin qu'il n'importe pas si les lettres dans "ger" sont en majuscules ou en minuscules. 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 à partir du code, j'ai simplement converti la chaîne qu'un utilisateur entrerait dans tous les minuscules. Cela n'aurait pas d'importance si chaque lettre alternait entre les minuscules et les majuscules parce que j'ai nié cela.

0
répondu William McDowell 2017-09-06 23:34:46