gpt4 book ai didi

java - 在 Java 中验证字符串返回不正确。测试来自扫描仪的字符串长度?

转载 作者:行者123 更新时间:2023-12-01 13:10:37 25 4
gpt4 key购买 nike

字符串验证问题:

这种方法在大多数情况下都有效,但存在一些明显的逻辑问题。如果用户在没有输入的情况下在控制台上按 Enter 键,它应该返回“错误!需要此条目”消息,但事实并非如此。我本以为会这样,因为我正在测试输入一个或更少的字符

public String getChoiceString(String prompt, String s1, String s2) {
this.println(prompt);
String userChoice = this.sc.next();
String i;
boolean isValid = false;
while (isValid == false)
{
if (userChoice.equalsIgnoreCase(s1) || userChoice.equalsIgnoreCase(s2))
{
isValid = true;
}
else if (userChoice.length() <= 1 || userChoice.equalsIgnoreCase("")) {
System.out.println("Error! This entry is required. Try again.");
userChoice = this.sc.next();
}
else {
this.println("Error! Entry must be " + s1 + " or " + s2 + ". Try again.");
userChoice = this.sc.next();
}

}
return userChoice;

从这里我创建包含此方法的类的实例。它被称为控制台。我从中调用方法:

public class ConsoleTestApp {    
public static void main(String[] args) {
System.out.println("Welcome to the Console Tester application");
System.out.println();

//get console object
Console console = IOFactory.getConsoleIO();
console.println("Int Test");
console.getIntWithinRange("Enter an integer between -100 and 100: ", -100, 100);
console.println();
console.println("Double Test");
console.getDoubleWithinRange("Enter any number between -100 and 100: ", -100, 100);
console.println();
console.println("Required String Test");
console.getRequiredString("Enter your email address: ");
console.println();
console.println("String Choice Test");
console.getChoiceString("Select one (x/y): ", "x", "y");
}
}

最佳答案

当您使用 Scanner#next 输入回车符时,似乎不会发生任何事情。 Javadoc要求它仅与带有分隔符的完整标记匹配。

Scanner 的默认分隔符是 \p{javaWhitespace}+。本质上,它将整个标记描述为其中至少有一个空白字符。

现在,让我们检查一下空的String。它不包含任何字符。因此,如果我们要匹配默认分隔符正则表达式,我们就会失败:

Scanner sc = new Scanner(System.in);
Pattern ptn = sc.delimiter();
System.out.println(ptn);
String empty = "";
String regex = "\\p{javaWhitespace}+";
System.out.println(empty.matches(regex)); // prints false

因此,模式不匹配,扫描器 将阻塞,直到它匹配某些内容,例如短语

因此,您可能希望使用 nextLine(),而不是尝试处理 next() 可能引起的任何头痛。在大多数情况下,当您想要匹配整个条目行时,您需要使用 nextLine() ,而当您在单个元素中处理多个元素时,则需要使用 next()线。

String userChoice = this.sc.nextLine(); // wherever this Scanner instance lives...

这将匹配任何东西 containing a line separator ,并且由于按回车键会产生该结果,因此它将匹配您输入的整行,即使它是一个空行。

关于java - 在 Java 中验证字符串返回不正确。测试来自扫描仪的字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com