如何检查字符串是否不等于其他多个字符串忽略大小写
问题描述:
我有一个程序,是要求用户在一周中的一天。我想测试用户给出的答案,并给他们一个机会,如果他们拼错了一天或进入别的东西来回答。我的平等要么忽略了扫描仪前,或打印出while语句不管我把那一天英寸如何检查字符串是否不等于其他多个字符串忽略大小写
System.out.println("Great! Welcome back " + cust.getName() + ". What day of the week would you like "
+ "to book?(Sunday, November the 12th thru Saturday, November the 18th");
String day = scan.nextLine();
String dayLower = day.toLowerCase();
scan.nextLine();
while (!"monday".equals(dayLower) && !dayLower.equals("tuesday") && !dayLower.equals("wednesday")
&& !dayLower.equals("thursday") && !dayLower.equals("friday") && !dayLower.equals("saturday")
&& !dayLower.equals("sunday")) {
System.out.println("Error in entry. Please enter a day of the week.");
day = scan.nextLine();
}
答
您可以通过它使用一个String数组,并循环检查,如果你输入匹配任何人
public static boolean isDay(String input) {
String days[] = {
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
};
for(String day : days) {
if(input.equalsIgnoreCase(day))
return true;
}
return false;
}
答
一种有效的方法是使用一个HashSet,这样的检查是O(1)
static final Set<String> days = new HashSet<>(Arrays.asList(
"monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"));
public boolean isDay(String input) {
return days.contains(input.toLowerCase());
}
答
您的问题是悬挂scan.nextLine()。删除的行,它会奏效。
System.out.println("Great! Welcome back " + cust.getName() + ". What day of the week would you like "
+ "to book?(Sunday, November the 12th thru Saturday, November the 18th");
String day = scan.nextLine();
String dayLower = day.toLowerCase();
//scan.nextLine();
while (!"monday".equals(dayLower) && !dayLower.equals("tuesday") && !dayLower.equals("wednesday")
&& !dayLower.equals("thursday") && !dayLower.equals("friday") && !dayLower.equals("saturday")
&& !dayLower.equals("sunday")) {
System.out.println("Error in entry. Please enter a day of the week.");
day = scan.nextLine();
}
PS:你的方法虽然不是最好的方法。 @Peter Lawrey的解决方案是一个更好的办法。
注意:你有一个浮动'scan.nextLine();'其中丢弃一条线,你只能转换为小写,第一时间,你需要在循环内为好。 –