20

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

4

8 回答 8

40

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

例如:

    if("asdhAkldffl".matches(".*[ABCDEFGH].*"))
    {
        System.out.println("yes");
    }
于 2013-01-18T04:18:17.003 回答
25

实现这一点的最简洁方法是使用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>
于 2013-01-18T04:35:24.170 回答
3

来自番石榴:CharMatcher.matchesAnyOf

private static final CharMatcher CHARACTERS = CharMatcher.anyOf("ABCDEFGH");
assertTrue(CHARACTERS.matchesAnyOf("39823839A983923"));
于 2017-06-08T13:33:02.397 回答
3

如果"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此代码段输出:

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

于 2019-01-28T09:52:37.853 回答
2

我认为这是一个新手问题,所以我会给你我能想到的简单方法:使用 indexof复杂版本包含正则表达式,如果你愿意,你可以尝试。

于 2013-01-18T04:21:19.643 回答
1

这就是如何使用 Pattern 和 Matcher 来实现的,

Pattern p = Pattern.compile("[^A-Za-z0-9 ]");
Matcher m = p.matcher(trString);
boolean hasSpecialChars = m.find();
于 2018-09-20T12:16:37.757 回答
1

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

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

于 2020-07-30T22:58:16.767 回答
0

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

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

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

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

于 2013-01-18T04:24:20.637 回答