我已经通过一种方法向用户询问他们的名字。如果用户没有输入任何文本,则应再次询问。我已经开始工作,但如果用户输入了一个数字,它仍会打印出来。如何阻止用户输入数字?
这是我的代码
public static void main(String[] args) {
// call method
System.out.println("Hello " + getName());
}
public static String getName() {
// input a scanner
Scanner scanner = new Scanner(System.in);
// declare vars
String userName = "";
// while loop
while (userName.equals("")) {
// ask user for input
System.out.println("What is your name?");
userName = scanner.nextLine();
}
scanner.close();
return userName;
}
}
答案 0 :(得分:1)
使用正则表达式的最佳方法。
footer_html = Tempfile.new(['footer_html', '.html'])
footer_html.write(render_to_string(partial: 'pdf/footer'))
footer_html.close
kit =
PDFKit.new(render_to_string('pdf/show',
layout: false,
footer_html: footer_html.path)
pdf_inline = kit.to_pdf
footer_html.unlink
pdf_inline
答案 1 :(得分:0)
由于正则表达式通常较慢,因此非正则表达式解决方案将是:
boolean containsDigit(final String string) {
boolean result = false;
if (string == null || string.isEmpty()) {
return result;
}
char[] characters = string.toCharArray();
for (char character : characters) {
if (Character.isDigit(character)) {
result = true;
break;
}
}
return result;
}
这将导致以下while循环
while (userName.equals("") || containsDigit(userName)) {
...
}
注意:更清晰的选择是使用username.isEmpty()
代替username.equals("")
答案 2 :(得分:0)
好Scanner有几种方法来处理用户输入。您可以用来检查用户输入是否为int
的方法之一是 hasNextInt()
:
如果使用nextInt()方法可以将此扫描器输入中的下一个标记解释为指定基数中的int值,则返回true。
所以你的代码将是:
if(!scanner.hasNextInt()){
userName = scanner.nextLine();
}
另一种方法是使用hasNext(Pattern)
方法,其模式只匹配字母字符串。
答案 3 :(得分:0)
如果您能够,您还可以使用ApacheCommons
之类的第三方库,并使用他们的StringUtils.isAlpha()
方法。
isAlpha()
方法还会检查提供的字符串是null
还是空。