Как игнорировать регистр при использовании 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;
}
}
как вы можете видеть из кода, я просто преобразовал строку, которую пользователь вводит, во все строчные буквы. Это не имело бы значения, если бы каждая буква чередовалась между строчными и прописными буквами, потому что я отрицал это.