检查字符串是不是仅是字母+空格?

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 所需要的(我怀疑这是一项家庭作业,任务是解决字符好/坏的决定以及字符串循环逻辑)。

以上是关于检查字符串是不是仅是字母+空格?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查一个php字符串是不是只包含英文字母和数字?

如何省略字符串的点、逗号和空格(检查回文时需要)

如何判断字符串是不是仅包含字母和空格

pyspark 中的正则表达式来检查字母和空格(也可以使用 uni 代码)

如何检查字符串是不是包含字符和空格,而不仅仅是空格?

如何用空格匹配、计数和替换字符串,但它们不是另一个字母字符串的子字符串?