2014-11-07 6 views
17

Вот мой код:Как игнорировать регистр при использовании startWith и концов с помощью 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 (

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

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

+0

Использовать 'command.toLowerCase(). StartWith (" up ")' и 'command.toLowerCase(). EndsWith (" right ")'. – Tom

ответ

31

Как это:

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

Будет ли '.toUpperCase()' работать, даже если строка содержит неалфавитные символы? Кроме того, знаете ли вы, можно ли их комбинировать в условном режиме с использованием логических (al?) Операторов? –

+0

@MataoGearsky Это будет работать, конечно. Неалфавитные символы просто игнорируются 'toUpperCase()'. И, конечно же, вышеупомянутое может быть объединено с логическими операторами (а почему бы и нет?) Они являются просто булевыми выражениями.) –

+2

Этот ответ неверен. Если вы посмотрите на реализацию 'String.equalsIgnoreCase()', вы обнаружите, что вам нужно сравнить как строчные, так и прописные версии строк, прежде чем вы сможете окончательно вернуть 'false'. См. Мой ответ на http://stackoverflow.com/a/38947571/14731. – Gili

11

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

Вот мой вариант, основанный на http://www.java2s.com/Code/Java/Data-Type/CaseinsensitivecheckifaStringstartswithaspecifiedprefix.htm:

+0

Это только из-за грузинского алфавита? – bphilipnyc

+0

@bphilipnyc Исправить. Это один пример, упомянутый исходным кодом «String», но мы не знаем, является ли он единственным. Береженого Бог бережет. – Gili

+0

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

0

я делал упражнения в моей книге и упражнения сказал, «Сделайте метод, который проверяет, чтобы увидеть, если конец строки заканчивается «гер». Напишите код, где он проверяет любую комбинацию прописных и строчных букв во фразе «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; 
} 

}

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