我想编写一个传递字符串的静态方法,并检查该字符串是否仅由字母和空格组成。我可以根据需要使用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;
}
}
我知道我的编码可能存在错误,并且可能有更简单的方法,但请告诉我您的建议!
答案 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;
}