如何确定字符串是不是包含非字母数字字符?

Posted

技术标签:

【中文标题】如何确定字符串是不是包含非字母数字字符?【英文标题】:How to determine if a String has non-alphanumeric characters?如何确定字符串是否包含非字母数字字符? 【发布时间】:2012-01-05 02:30:21 【问题描述】:

我需要一个可以告诉我字符串是否包含非字母数字字符的方法。

例如,如果字符串是“abcdef?”或“abcdefà”,该方法必须返回 true。

【问题讨论】:

***.com/questions/1795402/… ***.com/questions/11241690/… 【参考方案1】:

您必须遍历字符串中的每个字符并检查Character.isDigit(char);Character.isletter(char);

或者,您可以使用正则表达式。

【讨论】:

例如,“-1234”是一个数字,而不是字母数字字符串。但是您的逻辑 Character.isDigit 将为“-”返回 false。 :( 我认为是 Character.isLetter 而不是 Character.isletter【参考方案2】:

如果您可以使用 Apache Commons 库,那么 Commons-Lang StringUtils 有一个名为 isAlphanumeric() 的方法可以满足您的需求。

【讨论】:

【参考方案3】:

使用 Apache Commons 语言:

!StringUtils.isAlphanumeric(String)

交替迭代字符串的字符并检查:

!Character.isLetterOrDigit(char)

你还有一个问题: 您的示例字符串“abcdefà”是字母数字,因为à 是一个字母。但我认为您希望它被视为非字母数字,对吧?!

所以你可能想改用正则表达式:

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();

【讨论】:

如果不是绝对必要的话,我想避免导入外部库。是的:我希望 à 被视为非字母数字。 a 旁注: 无关但只是提醒StringUtils.isAlphaNumeric("abc"); 如果str 只包含字母则返回true【参考方案4】:

一种方法是使用 String 类本身来做到这一点。 假设您的字符串是这样的:

String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");

另一种是使用外部库,例如 Apache commons:

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);

【讨论】:

+1: regex 是我认为的赢家,因为 OP 并不想检查字母数字字符。他想要……就像hasSpecialCharacters(String) 有他自己对“特殊”的定义。 那行不通:String.matches(...) 在 Java 中检查正则表达式是否匹配 整个 字符串。 boolean hasNonAlpha = ! … ^[A-Za-z0-9 ]*$【参考方案5】:

string.matches("^\\W*$"); 应该做你想做的事,但它不包括空格。 string.matches("^(?:\\W|\\s)*$"); 也匹配空格。

【讨论】:

【参考方案6】:

可以使用Java.lang中Character类的isLetter(char c)静态方法。

public boolean isAlpha(String s) 
    char[] charArr = s.toCharArray();

    for(char c : charArr) 
        if(!Character.isLetter(c)) 
            return false;
        
    
    return true;

【讨论】:

【参考方案7】:

使用此函数检查字符串是否为字母数字:

public boolean isAlphanumeric(String str)

    char[] charArray = str.toCharArray();
    for(char c:charArray)
    
        if (!Character.isLetterOrDigit(c))
            return false;
    
    return true;

它省去了导入外部库的麻烦,并且如果您以后希望对字符串执行不同的验证检查,可以轻松修改代码。

【讨论】:

【参考方案8】:

虽然它不适用于数字,但您可以检查小写和大写的值是否相同,对于非字母字符它们将相同,您应该在此之前检查数字以获得更好的可用性

【讨论】:

以上是关于如何确定字符串是不是包含非字母数字字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何搜索包含非字母数字或空格字符的行?

如何检查字符串是不是至少包含一个数字、字母和既不是数字也不是字母的字符?

包含至少 8 个字符和至少 1 个非字母数字字符的密码的正则表达式

Lua:如何检查字符串是不是只包含数字和字母?

如何验证字符串是不是仅包含字母、数字、下划线和破折号?

如何从 Python 的数据框列中的字符串中删除非字母数字字符?