【发布时间】:2013-01-01 18:29:45
【问题描述】:
如何检查字符列表是否在字符串中,例如“ABCDEFGH”如何检查其中任何一个是否在字符串中。
【问题讨论】:
-
您的意思是要检查某些字符串是否包含列表中的字符?
-
在问这样的问题之前可能应该在别处看看。
-
我认为OP的意思是问正则表达式但不知道怎么问
如何检查字符列表是否在字符串中,例如“ABCDEFGH”如何检查其中任何一个是否在字符串中。
【问题讨论】:
在java中使用正则表达式来检查使用str.matches(regex_here)
regex in java
例如:
if("asdhAkldffl".matches(".*[ABCDEFGH].*"))
{
System.out.println("yes");
}
【讨论】:
最简洁的实现方式是使用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>
【讨论】:
来自番石榴:CharMatcher.matchesAnyOf
private static final CharMatcher CHARACTERS = CharMatcher.anyOf("ABCDEFGH");
assertTrue(CHARACTERS.matchesAnyOf("39823839A983923"));
【讨论】:
如果"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);
使用字符串 asdhAkldffl 和 ABCDEFGH 这个 sn-p 输出:
asdhAkldffl 是否包含 [A, B, C, D, E, F, G, H] 中的任何一个?真的
【讨论】:
我认为这是一个新手问题,所以我给你我能想到的简单方法:using indexof复杂版本包括regex你可以尝试。
【讨论】:
这就是使用 Pattern 和 Matcher 可以实现的方式,
Pattern p = Pattern.compile("[^A-Za-z0-9 ]");
Matcher m = p.matcher(trString);
boolean hasSpecialChars = m.find();
【讨论】:
使用 Apache Commons StringUtils.containsAny()..满足许多不同的用例,用于检查字符串中是否存在某些字符。
【讨论】:
这似乎是一个家庭作业问题... -_-
您可以使用 String.contains() 函数。
例如:
"string".contains("a");
String str = "wasd";
str.contains("a");
但您需要为每个要检查的字符调用一次。
【讨论】: