Как игнорировать регистр при использовании startWith и заканчивается With в 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 (

Я хотел бы предоставить пользователю некоторую свободу действий в отношении того, как он может вводить команды, например: верхний правый, верхний правый, верхний правый, верхний левый и т. Д. if (, проверить, если cutInput начинается с "сверху" или "вверх" и проверить, если cutInput оканчивается на "влево" или "вправо", но без учета регистра. Это вообще возможно?

Конечная цель этого состоит в том, чтобы позволить пользователю в одной строке ввода выбрать одну из четырех ориентаций треугольника. Это был лучший способ, которым я мог придумать, но я все еще довольно новичок в программировании в целом и, возможно, слишком усложняюсь. Если да, и получается, что есть более простой способ, пожалуйста, дайте мне знать.

3 ответа

Решение

Как это:

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

Принятый ответ неверен. Если вы посмотрите на реализацию String.equalsIgnoreCase() вы обнаружите, что вам нужно сравнить строчные и прописные версии строк, прежде чем вы сможете окончательно вернуть false,

Вот моя собственная версия, основанная на 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()
    {
    }
}

Я выполнял упражнение в своей книге, и в упражнении говорилось: "Создайте метод, который проверяет, заканчивается ли конец строки буквой"ger". Напишите код, в котором он проверяет любую комбинацию прописных и строчных букв в фразе "ger". "

Так что, в основном, он попросил меня проверить фразу внутри строки и игнорировать регистр, чтобы не имело значения, являются ли буквы в "ger" прописными или строчными буквами. Вот мое решение:

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

}

как вы можете видеть из кода, я просто преобразовал строку, которую пользователь вводит, во все строчные буквы. Это не имело бы значения, если бы каждая буква чередовалась между строчными и прописными буквами, потому что я отрицал это.

Другие вопросы по тегам