检查字符串是否只是字母+空格?

时间:2014-06-12 18:02:57

标签: java xcode loops for-loop boolean

我想编写一个传递字符串的静态方法,并检查该字符串是否仅由字母和空格组成。我可以根据需要使用String的方法length()和charAt(i)。

我正在考虑以下内容:(对于伪代码抱歉)

public static boolean onlyLettersSpaces(String s){
for(i=0;i<s.length();i++){
if (s.charAt(i) != a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) {
return false;
break;
}else {
return true;
}
}

我知道我的编码可能存在错误,并且可能有更简单的方法,但请告诉我您的建议!

4 个答案:

答案 0 :(得分:5)

使用正则表达式。只有当它以字母和空格开头,包含和结尾时才会匹配。

^[ A-Za-z]+$

在Java中,将其初始化为模式并检查它是否与您的字符串匹配。

Pattern p = Pattern.compile("^[ A-Za-z]+$");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

答案 1 :(得分:3)

这不是你如何测试角色平等,一个简单的解决方法就是

public static boolean onlyLettersSpaces(String s){
  for(i=0;i<s.length();i++){
    char ch = s.charAt(i);
    if (Character.isLetter(ch) || ch == ' ') {
      continue;
    }
    return false;
  }
  return true;
}

答案 2 :(得分:0)

对于你提到的约束(只使用length()和charAt()),你得到的几乎是正确的。

你循环遍历每个角色并检查它是否是可接受的角色之一 - 这是正确的方式。如果你发现一个不可接受的角色,你会立即返回“假”,这也很好。什么错误是如果你决定接受这个角色,你的确会返回true。但是定义说只有在接受所有字符时才返回true。你需要将“return true”移动到循环之后(这就是你知道所有字符都被接受的点)

因此,您将伪代码更改为:

for (all characters in string) {
    if (character is bad) {
        // one bad character means reject the string, we're done.
        return false;
    }
}
// we now know all chars are good
return true;

答案 3 :(得分:0)

解决方案::我更喜欢使用一个简单的循环。

public static boolean isLetterAndSpace(String s) {
    if (s == null || s.length() == 0) {
        return false;
    }

    char[] chars = s.toCharArray();
    for (int index = 0; index < chars.length; index++) {
        int codePoint = Character.codePointAt(chars, index);
        if (!Character.isLetter(codePoint) && !Character.isSpaceChar(codePoint)) {
            return false;
        }
    }

    return true;
}