字符串的额外Java输入验证

时间:2019-03-05 11:47:49

标签: java string

我要这样做,以便仍然可以检测到简短的输入,例如“ Londo”和“ Lon”,但是要使其较小并在基本上不复制和粘贴代码的情况下使用它,有什么提示吗?谢谢。

if (Menu.answer1.equals("London"))
        {
         if (location.equals("London")) {
             System.out.print(location + " ");
             System.out.print(date + " ");
             System.out.print(degrees + "C ");
             System.out.print(wind + "MPH ");
             System.out.print(winddirection + " ");
             System.out.print(weather + " ");
             System.out.println("");
         }

5 个答案:

答案 0 :(得分:3)

您可以使用startsWith()

String city = "London";
if (city.startsWith("Lon")) {
    // do something
}

答案 1 :(得分:1)

此外,如果您需要检查一些子字符串,则可以使用contains方法:

Menu.answer1 = "London";
Menu.answer1.contains("ondo"); // true

答案 2 :(得分:0)

如果要检查一组固定的替代方法,可以使用contains使用有效输入的列表:

List<String> londonNames = Arrays.asList("London", "Londo", "Lon");
if (londonNames.contains(Menu.answer1)) {
 ...
}

答案 3 :(得分:0)

您可以使用(case-insensitive)正则表达式执行相同操作,例如:

(?)Lon[a-z]{0,3}其中

  • (?)=不区分大小写
  • Lon =前3个字符
  • [a-z] {0,3} = 0到3之间的任意数量的字母

这是一个例子:

String regex = "(?)Lon[a-z]{0,3}";
System.out.println("London".matches(regex));
System.out.println("Lond".matches(regex));
System.out.println("Lon".matches(regex));

答案 4 :(得分:0)

如果潜在的问题是用户可以输入多个名称之一,而您想允许缩写,那么一种相当标准的方法是拥有一个可接受名称的表。

给出用户输入,循环遍历表测试“表条目是否以用户键入的字符串开头?” (就像这里以前的答案之一一样)。如果是,则您具有潜在匹配项。

继续看。如果您获得 second 匹配项,则用户输入不明确,应予以拒绝。

作为奖励,您可以收集所有匹配的名称,然后在错误消息中使用它们。 (“选择伦敦,隆富,隆巴的其中一个”。

此方法的优点是(与一长串的if-then-else逻辑相比),当您只想拥有更多数据时,不需要编写更多代码。

它会自动使用最短的唯一缩写,并会在由于新添加的名称而使曾经唯一的缩写不再唯一时进行调整。