【问题标题】:How to check if only chosen characters are in a string?如何检查字符串中是否只有选定的字符?
【发布时间】:2011-05-24 22:56:38
【问题描述】:

检查字符串是否仅包含以下字符的最佳和最简单的方法是:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

我想要一个像这样的伪代码的例子:

//If String contains other characters
else
//if string contains only those letters

请和谢谢:)

【问题讨论】:

  • 为什么每个人都建议使用正则表达式?太慢了!
  • @thejh:你的分析器是怎么说的?

标签: java string character


【解决方案1】:

对于特定的字符串类,使用正则表达式“\w+”。

Pattern p = Pattern.compile("\\w+");
Matcher m = Pattern.matcher(str);

if(m.matches()) {} 
else {};

请注意,我使用 Pattern 对象来编译正则表达式 once,这样它就不必再次编译,如果您在大量或循环中执行此检查可能会很好。根据 java 文档...

如果要使用多个模式 次,编译一次并重用 它会比 每次都调用这个方法。

【讨论】:

  • 不错的一个!一个提示:如果这需要经常运行,我会做p static final。
  • 模式不会那样工作。你需要像 Matcher m = p.matcher( s ); 这样的东西。 if ( m.matches()){} else{};
  • 在我的非科学测试中,这是迄今为止最快的,我在 Pablo 的答案中使用了模式而不是 \\w+
  • 抱歉,修复了我的代码。虽然正则表达式 \\w+ 与 [a-zA-Z0-9_]+ 相同,但这是一个小问题。
【解决方案2】:
if (string.matches("^[a-zA-Z0-9_]+$")) {
  // contains only listed chars
} else {
  // contains other chars
}

【讨论】:

  • 与 \w 相比,这不是有点冗长,而且由于您要匹配 ^ 和 $ 不需要?此外,您的正则表达式看起来会匹配一个空字符串(使用 * char)。没有说你的回答是错的,只是对提问者来说可能是一个 FYI。
  • 除了一种情况:空白字符串不包含列出的字符,所以它应该是+而不是模式中的*
  • 安德鲁:我不确定 \w(ord) 字符类是否仅与那组字符匹配
  • Andrew:需要 ^ & $ 来确保字符串仅包含枚举字符
  • 您缺少右括号。
【解决方案3】:

轮到我了:

static final Pattern bad = Pattern.compile("\\W|^$");
//...
if (bad.matcher(suspect).find()) {
  // String contains other characters
} else {
  // string contains only those letters
}

以上搜索单个不匹配或空字符串。

根据Pattern的JavaDoc:

\w  A word character: [a-zA-Z_0-9]
\W  A non-word character: [^\w]

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 2022-12-01
    • 2015-09-28
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多