检查string是否只包含字母
这个想法是有一个string读取,并validation它不包含任何数字字符。 所以像“smith23”这样的东西是不可接受的。
你想要什么? 速度还是简单? 为了速度,去一个基于循环的方法。 为简单起见,请使用基于RegEx的单线式方法。
速度
public boolean isAlpha(String name) { char[] chars = name.toCharArray(); for (char c : chars) { if(!Character.isLetter(c)) { return false; } } return true; }
简单
public boolean isAlpha(String name) { return name.matches("[a-zA-Z]+"); }
Java 8 lambdaexpression式。 既快又简单。
boolean allLetters = someString.chars().allMatch(Character::isLetter);
或者,如果您正在使用Apache Commons, [StringUtils.isAlpha()] 。
我用这个正则expression式(".*[a-zA-Z]+.*")
。 if not
声明,它将避免所有在之前,末尾或任何types的其他字符之间具有字母的expression式。
String strWithLetters = "123AZ456"; if(! Pattern.matches(".*[a-zA-Z]+.*", str1)) return true; else return false
一个快速的方法是:
public boolean isStringAlpha(String aString){ int charCount=0; String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; if(aString.length() == 0) return false;//zero length string ain't alpha for(int i=0;i<aString.length();i++){ for(int j=0;j<alphabet.length();j++){ if(aString.substring(i,i+1).equals(alphabet.substring(j,j+1)) || aString.substring(i,i+1).equals(alphabet.substring(j,j+1).toLowerCase())) charCount++; } if(charCount != (i+1)){ System.out.println("\n**Invalid input! Enter alpha values**\n"); return false; } } return true; }
因为你不必运行整个aString
来检查它是不是一个alphastring 。
下面是更快的方法。 考虑到字母只有az,AZ。
public static void main( String[] args ){ System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); System.out.println(bestWay("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); System.out.println(isAlpha("azAZpratiyushkumarsinghjdnfkjsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); } public static boolean bettertWay(String name) { char[] chars = name.toCharArray(); long startTimeOne = System.nanoTime(); for(char c : chars){ if(!(c>=65 && c<=90)&&!(c>=97 && c<=122) ){ System.out.println(System.nanoTime() - startTimeOne); return false; } } System.out.println(System.nanoTime() - startTimeOne); return true; } public static boolean isAlpha(String name) { char[] chars = name.toCharArray(); long startTimeOne = System.nanoTime(); for (char c : chars) { if(!Character.isLetter(c)) { System.out.println(System.nanoTime() - startTimeOne); return false; } } System.out.println(System.nanoTime() - startTimeOne); return true; }
运行时间以纳秒计算。 它可能会改变系统到系统。
5748//bettertWay without numbers true 89493 //isAlpha without numbers true 3284 //bettertWay with numbers false 22989 //isAlpha with numbers false
private boolean isOnlyLetters(String s){ char c=' '; boolean isGood=false, safe=isGood; int failCount=0; for(int i=0;i<s.length();i++){ c = s.charAt(i); if(Character.isLetter(c)) isGood=true; else{ isGood=false; failCount+=1; } } if(failCount==0 && s.length()>0) safe=true; else safe=false; return safe; }
我知道这有点拥挤。 我把它和我的程序一起使用,并且感受到与人分享的愿望。 它可以告诉string中的任何字符是否不是字母。 如果你想要一些容易澄清和回顾的东西,请使用它。
String expression = "^[a-zA-Z]*$"; CharSequence inputStr = str; Pattern pattern = Pattern.compile(expression); Matcher matcher = pattern.matcher(inputStr); if(matcher.matches()) { //if pattern matches } else { //if pattern does not matches }
检查这个,我想这是帮助你,因为它是在我的项目工作,所以一旦你检查这个代码
if(! Pattern.matches(".*[a-zA-Z]+.*[a-zA-Z]", str1)) { String not contain only character; } else { String contain only character; }
尝试使用正则expression式: String.matches
public boolean isAlpha(String name) { String s=name.toLowerCase(); for(int i=0; i<s.length();i++) { if((s.charAt(i)>='a' && s.charAt(i)<='z')) { continue; } else { return false; } } return true; }