2014-06-12 159 views
4

我想写一个传递一个字符串的静态方法,并检查字符串是否由字母和空格组成。我可以用字符串的方法长度()和的charAt(一)根据需要..检查一个字符串是否只有字母+空格?

我想类似如下:(很抱歉的伪代码)

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

你可以使用正则表达式? –

+0

(or indenting ..) – user2864740

回答

5

使用正则表达式。如果仅以字母和空格开头,包含并仅以字母和空格结束,则此匹配项只匹配。

^[ A-Za-z]+$ 

在Java中,初始化以此为模式,并检查是否你的字符串相匹配。

Pattern p = Pattern.compile("^[ A-Za-z]+$"); 
Matcher m = p.matcher("aaaaab"); 
boolean b = m.matches(); 
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; 
} 
+0

什么是“ch”?******************* – user3735218

+0

@ user3735218对不起,编辑。这是一个复制粘贴错误。 'char ch = s.charAt(i);' –

+1

Character.isLetter()对于*多于*而不是对A-z返回true。它可能不是OP所需要的(我怀疑这是一项家庭作业,而且任务是解决字符好/坏决定以及字符串循环逻辑)。 – Durandal

0

对于你提到的约束(只使用length()和charAt()),你已经明白了。

你会遍历每个字符并检查它是否是可接受的字符之一 - 这是正确的方式。如果你发现一个不可接受的字符,你立即返回“假”,这也是不错的。什么错误是,如果你决定接受这个角色,你确实返回true。但定义说只有在全部个字符被接受时才返回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; 
+0

如果我在回路中放置一个return语句,循环会取消吗?希望它 – user3735218

+0

@ user3735218是的。试着用真实的代码解决它,你会看到一个返回后跟中断会给编译器带来错误,因为返回使得它不可能达到中断。 – Durandal

相关问题