检查字符串是不是仅是字母+空格?
Posted
技术标签:
【中文标题】检查字符串是不是仅是字母+空格?【英文标题】:Checking to see if a string is letters + spaces ONLY?检查字符串是否仅是字母+空格? 【发布时间】:2014-08-03 04:05:12 【问题描述】:我想编写一个静态方法,它传递一个字符串并检查字符串是否仅由字母和空格组成。我可以根据需要使用 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;
我知道我的编码中可能存在错误,并且可能有更简单的方法可以做到这一点,但请告诉我您的建议!
【问题讨论】:
可以用正则表达式吗? 【参考方案1】:使用正则表达式。仅当它以字母和空格开头、包含和结尾时才匹配。
^[ A-Za-z]+$
在 Java 中,将其初始化为模式并检查它是否与您的字符串匹配。
Pattern p = Pattern.compile("^[ A-Za-z]+$");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
【讨论】:
【参考方案2】:对于您提到的约束(仅使用 length() 和 charAt()),您几乎是正确的。
您确实循环遍历每个字符并检查它是否是可接受的字符之一 - 这是正确的方法。如果你发现一个不可接受的字符,你立即返回“false”,这也很好。 错误是,如果你决定接受这个角色,你会返回 true。但该定义仅表示如果 all 字符被接受,则返回 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;
【讨论】:
如果我将return语句放入循环中,循环会取消吗?希望是的 @user3735218 是的,它会的。尝试在实际代码中解决它,您会看到 return 后跟 break 会导致编译器错误,因为 return 使得永远无法到达 break。【参考方案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;
【讨论】:
什么是“ch”?************************ @user3735218 抱歉,已编辑。那是复制粘贴错误。char ch = s.charAt(i);
Character.isLetter() 为 更多 返回 true,而不仅仅是 A-z。它可能不是 OP 所需要的(我怀疑这是一项家庭作业,任务是解决字符好/坏的决定以及字符串循环逻辑)。以上是关于检查字符串是不是仅是字母+空格?的主要内容,如果未能解决你的问题,请参考以下文章