2016-01-22 141 views
-2

如何验证Java中的此字符串输入?验证字符串输入

两个字母后跟三个数字和一个字母。最后一封信只能是B的商业帐户或N的非商业帐户

一个例子是'JB213B'或'JB231N'。

编辑:对,我现在使用正则表达式,谢谢。

虽然现在我提出如何实际进行验证,这里是我迄今为止

  System.out.println("Enter your reference"); 
      String reference = keyboard.next(); 
      String regex = "[A-Z]{2}[0-9]{3}[B|N]"; 
      boolean match = reference.matches(regex); 
      while (!match) 
      { 
       System.out.println("That isn't a valid reference"); 
       reference = keyboard.next(); 
       match = reference.matches(regex); 
      } 
+0

遍历字符串的每个字符,并确保它是它应该是什么?或者,也许正则表达式会起作用。 –

+0

我希望能有一种不太重要的方式,而不是迭代每个角色,但是谢谢。 –

+0

使用正则表达式无法正常工作的原因是什么? –

回答

2

你可以做到这一点使用正则表达式。

在这种情况下的表达。将^[A-Z]{2}[0-9]{3}[B|N]$

ThisString类的.matches()方法的参考。

同样,您也可以使用Pattern类来查找匹配项。 This是一个参考。

用法:

String strToTest = "AB123B"; 
    String pattern = "^[A-Z]{2}[0-9]{3}[B|N]$"; 
    Pattern p = Pattern.compile(patern); 
    Matcher m = p.matcher(strToTest); 
    boolean b = m.matches(); 

性能比较:

哪个是更好的 “使用正则表达式” 或 “使用字符串比较”?

这个问题总是有争议的。但是我发现,了解需求的复杂性在任何情况下都是无用的。

如果有很多需要使用正则表达式可以跳过的字符串比较,那么我会用正则表达式去。

但是还应该考虑使用多个和/或复杂的正则表达式会影响性能,因为正则表达式的评估对编译器来说也是一个单调乏味且复杂的过程(与字符串操作相比)。

另一方面,使用字符串比较也容易出错,因为我们直接处理索引并剥离不必要的部分。

2

使用如下的正则表达式。

String st = "JB213B"; 
String regex= "[A-Z]{2}\\d{3}[BN]"; 

boolean match = st.matches(regex); 
+0

那么,这是否会验证输入? 'System.out.println(“Enter your reference”); String reference = keyboard.next(); String regex =“[A-Z] {2} [0-9] {3} [B | N]”; boolean match = reference.matches(regex); while(match = false) System.out.println(“This is not a valid reference”); reference = keyboard.next(); match = reference.matches(regex); }' –

+0

是的,看起来是正确的,除了(match == false),not(match = false),更好的是,编写_(!match)_而不是。我刚刚编辑你的文章来改变它。 – Berger

+0

谢谢你的回答,现在我可以停止把我的头发扯到这样愚蠢的东西上:') –

3

只是可以肯定有人打架非正则表达式的可能性:

public boolean isValid(String s) { 
    return s.length() == 6 && 
     s.charAt(0) >= 'A' && s.charAt(0) <= 'Z' && 
     s.charAt(1) >= 'A' && s.charAt(1) <= 'Z' && 
     s.charAt(2) >= '0' && s.charAt(2) <= '9' && 
     s.charAt(3) >= '0' && s.charAt(3) <= '9' && 
     s.charAt(4) >= '0' && s.charAt(4) <= '9' && 
     (s.charAt(5) == 'B' || s.charAt(5) == 'N'); 
} 
3

您可以将字符串比较使用匹配()方法的正则表达式。

// Match A-Z twice, 0-9 three times, and B or N once 
String myString = "JB213B"; 
String myPattern = "[A-Z]{2}[0-9]{3}[BN]{1}"; 
if(myString.matches(myPattern){ 
    // Do continuing logic 
} else { 
    // Do error logic 
}