如何检查字符串是不是包含字符列表?

Posted

技术标签:

【中文标题】如何检查字符串是不是包含字符列表?【英文标题】:How do I check if a string contains a list of characters?如何检查字符串是否包含字符列表? 【发布时间】:2013-01-01 18:29:45 【问题描述】:

如何检查字符列表是否在字符串中,例如“ABCDEFGH”如何检查其中任何一个是否在字符串中。

【问题讨论】:

您的意思是要检查某些字符串是否包含列表中的字符? 在问这样的问题之前可能应该在别处看看。 我认为OP的意思是问正则表达式但不知道怎么问 【参考方案1】:

在java中使用正则表达式来检查使用str.matches(regex_here) regex in java

例如:

    if("asdhAkldffl".matches(".*[ABCDEFGH].*"))
    
        System.out.println("yes");
    

【讨论】:

区域敏感度怎么样?【参考方案2】:

最简洁的实现方式是使用StringUtils.containsAny(String, String)

package com.sandbox;

import org.apache.commons.lang.StringUtils;
import org.junit.Test;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class SandboxTest 

    @Test
    public void testQuestionInput() 
        assertTrue(StringUtils.containsAny("39823839A983923", "ABCDEFGH"));
        assertTrue(StringUtils.containsAny("A", "ABCDEFGH"));
        assertTrue(StringUtils.containsAny("ABCDEFGH", "ABCDEFGH"));
        assertTrue(StringUtils.containsAny("AB", "ABCDEFGH"));
        assertFalse(StringUtils.containsAny("39823839983923", "ABCDEFGH"));
        assertFalse(StringUtils.containsAny("", "ABCDEFGH"));
    


Maven 依赖:

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.5</version>
    </dependency>

【讨论】:

@advocate 可能是因为它没有内置到 java 中。您必须下载 Apache Commons Lang 才能获得它。 commons.apache.org/proper/commons-lang 确保将其添加到您的类路径中。 谢谢!对于其他人,您需要解压缩下载包(我建议在您的项目文件夹中)。在 Eclipse 中右键单击您的项目 -> 构建路径 -> 配置构建路径 -> 添加外部 jars -> 选择 commons lang jars。您还需要在 inport 语句中使用正确的版本号:import org.apache.commons.lang3.StringUtils; 这应该是公认的答案 - 它更干净、更简单,并且在我使用预编译的 RegEx 验证 Windows 文件名的保留字符的测试中(例如 Pattern.compile(".*?[:\"/\\|?*]+?.*")), StringUtils.containsAny 的执行速度快了约 6 倍。【参考方案3】:

来自番石榴:CharMatcher.matchesAnyOf

private static final CharMatcher CHARACTERS = CharMatcher.anyOf("ABCDEFGH");
assertTrue(CHARACTERS.matchesAnyOf("39823839A983923"));

【讨论】:

【参考方案4】:

如果"ABCDEFGH"在字符串变量中,则正则表达式解决不好。如果字符串包含任何在正则表达式中具有特殊含义的字符,它将不起作用。相反,我建议:

    Set<Character> charsToTestFor = "ABCDEFGH".chars()
            .mapToObj(ch -> Character.valueOf((char) ch))
            .collect(Collectors.toSet());
    String stringToTest = "asdhAkldffl";
    boolean anyCharInString = stringToTest.chars()
            .anyMatch(ch -> charsToTestFor.contains(Character.valueOf((char) ch)));
    System.out.println("Does " + stringToTest + " contain any of " + charsToTestFor + "? " + anyCharInString);

使用字符串 asdhAkldfflABCDEFGH 这个 sn-p 输出:

asdhAkldffl 是否包含 [A, B, C, D, E, F, G, H] 中的任何一个?真的

【讨论】:

我在回答时没有考虑到这一点。这是个好的观点。有办法绕过它。您可以使用“\”转义特殊字符。我并不是说这是“另一方面”,我只是让其他人知道每个角度。【参考方案5】:

我认为这是一个新手问题,所以我给你我能想到的简单方法:using indexof复杂版本包括regex你可以尝试。

【讨论】:

【参考方案6】:

这就是使用 Pattern 和 Matcher 可以实现的方式,

Pattern p = Pattern.compile("[^A-Za-z0-9 ]");
Matcher m = p.matcher(trString);
boolean hasSpecialChars = m.find();

【讨论】:

【参考方案7】:

使用 Apache Commons StringUtils.containsAny()..满足许多不同的用例,用于检查字符串中是否存在某些字符。

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#containsAny-java.lang.CharSequence-char...-

【讨论】:

【参考方案8】:

这似乎是一个家庭作业问题... -_-

您可以使用 String.contains() 函数。 例如:

"string".contains("a");
String str = "wasd";
str.contains("a");

但您需要为每个要检查的字符调用一次。

【讨论】:

这是一个低效的解决方案,使用正则表达式更好。 我发布它是因为如果您还不知道正则表达式,它更简单,更容易理解。 是的,但是如果你想用这种方法检查它是否只包含数字数据,祝你好运。 即使是这样。这不是一个可以接受的回答态度。 问题要求提供一个字符列表,而不是一个字符

以上是关于如何检查字符串是不是包含字符列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Linq where 条件检查字符串列表是不是包含任何字符串

如何检查字符串是不是包含列表的任何元素并获取元素的值?

检查列表是不是包含特定字符串,问题[关闭]

如何检查字符串是不是具有列表中的子字符串?

如何从字符串的起始位置检查是不是包含字符串

使用 LINQ 检查字符串是不是包含字符串或字符列表