我需要检查一个字符串是否包含任何这些字符串的可能性:
MNC 胸罩 LEB MAR RVC 办法 GLZ 万维网 HYB
我目前的代码:
if(selectedLocation.equals("OTH"))
{
if(!currentClassLocation.equals("MNC") &&
!currentClassLocation.equals("BRA") &&
!currentClassLocation.equals("LEB") &&
!currentClassLocation.equals("MAR") &&
!currentClassLocation.equals("RVC") &&
!currentClassLocation.equals("WAY") &&
!currentClassLocation.equals("GLZ") &&
!currentClassLocation.equals("WWW") &&
!currentClassLocation.equals("HYB"))
{
//Awesome, I need this string! I operate on it here.
}
}
长话短说,我不能使用for-loop。有没有办法可以检查字符串是否包含任何没有迭代的字符串?
答案 0 :(得分:9)
使用HashSet
:
Set<String> invalidSequences = new HashSet<String>();
invalidSequences.add("MNC");
invalidSequences.add("BRA");
invalidSequences.add("LEB");
// Remaining sequences ...
if (!invalidSequences.contains(currentClassLocation)) {
// Awesome, I need this string...
}
答案 1 :(得分:2)
尝试将这些字符串添加到Set然后使用包含O(c):
的包进行查找public class Filter {
Set<String> exclusionSet = new HashSet<String>();
public Filter( String... excludes ) {
for( String exclusion : excludes ) {
exclusionSet.add( exclusion );
}
}
public boolean exclude( String src ) {
return exclusionSet.contains( src );
}
public static void main( String[] args ) {
Filter filter = new Filter( "MNC BRA LEB MAR RVC WAY GLZ WWW HYB".split(" ") );
for( String arg : args ) {
System.out.println( arg + " is excluded? " + filter.exclude( arg ) );
}
}
}
答案 2 :(得分:1)
创建字符串的HashSet,并执行O(1)检查以查看当前类位置是否存在于字符串集中。
答案 3 :(得分:0)
尝试使用此变体(使用您的字符串):
Pattern pattern = Pattern.compile("(.*(AIN|BIN|CIN|Blam).*)*");
Matcher matcher = pattern.matcher(string_to_test);
在此处测试java正则表达式模式:Java Regex Tester
答案 4 :(得分:0)
如果你想使用for循环,你可以简单地使用变量
String[] data = {"BRA","LEB","MAR","RVC","WAY","GLZ","WWW","HYB"};
if(selectedLocation.equals("OTH"))
{
boolean chk = false;
for(int i = 0; i < data.length; i++)
chk |= currentClassLocation.equals(data[i]);
if(!chk){
//Awesome, I need this string! I operate on it here.
}
}
答案 5 :(得分:0)
如果您不想手动添加要设置的数据,也可以使用此功能。
import java.util.Arrays;
public class StringFind {
public static void main(String[] args) {
String stringtotest = "MNC";
String dataString = "MNC BRA LEB MAR RVC WAY GLZ WWW HYB";
String[] dataArray= dataString.split(" ");
Arrays.sort(dataArray); // You can omit this if data is already sorted.
if(Arrays.binarySearch(dataArray, stringtotest)<0){
System.out.println("Does not Exists");
}else{
System.out.println("Exists");
}
}
}
答案 6 :(得分:0)
使用配置文件,以便无效序列列表可配置。因为这是最神奇的一点,魔术字母组合系列。将它移动到一组并没有帮助。
答案 7 :(得分:0)
使用字符串数组:
String[] arr = {"MNC", "BRA", "LEB", "MAR", "RVC", "WAY", "GLZ", "WWW", "HYB"};
List list = Arrays.asList(arr);
if (!list.contains(currentClassLocation)) {
...
}