我将用户输入限制为20个字符但不知道如何将其限制为仅字母,数字,空格和短划线。 我使用了像
这样的东西 System.out.println("\nEnter title: ");
title = scanner.nextLine();
while(title.length()>=20){
System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
title = scanner.nextLine();
}
答案 0 :(得分:0)
匹配预期的正则表达式
v2 = c(-1, -1, 1, 1, 1, -1, 1, -1)
所以java代码可能是
^[A-Za-z0-9 -]{1,20}$
请注意,短划线必须是字符集中的最后一个或第一个(以字面为单位)字符,否则用于设置间隔。
答案 1 :(得分:0)
这就像你现在拥有它一样,只有更多的支票。我会把它放到一个单独的函数中。
public void test(String[] args) throws Exception {
String title;
Scanner scanner = new Scanner(System.in);
System.out.println("\nEnter title: ");
title = scanner.nextLine();
while (!validTitle(title)) {
System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
title = scanner.nextLine();
}
}
private static final String DIGITS = "0123456789";
private static final String LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String VALID_TITLE_CHARS = DIGITS + LETTERS + " _-";
private boolean validTitle(String title) {
if (title.length() >= 20) return false;
for(int i = 0; i < title.length(); i++) {
if(VALID_TITLE_CHARS.indexOf(title.charAt(i)) < 0) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
Pattern p = Pattern.compile("^[- a-zA-Z0-9]{1,20}$");
...
Matcher m = p.matcher(title);
if (!m.matches()) {
System.out.println("\nEnter title with max 20 chars and only letters and numbers: ");
title = scanner.nextLine();
}
^ [ - a-zA-Z0-9] {1,20} $:只有短划线,空格,字母,长度为1-20的数字
如果您经常使用它,请尝试仅编译一次该模式。这使它更快。