我正在一个java项目上工作,我想知道如何使用字符串来确定数组中的字符是否有效。给定字符串为final String ALLOWED_CHARS = "01"
。
假设我有两个字符数组:
char[] valid = {0,0,1,0,0,0,1,1,0,1}
char[] invalid = {0,0,1,0,0,A,1,1,0,1}
使用ALLOWED_CHARS
字符串确定有效和无效数组的有效方法是什么?我假设我需要循环遍历数组,并以某种方式将每个字符与ALLOWED_CHARS
中的字符进行比较,但我不确定如何去做。
您可以从输入字符数组中形成字符串,然后使用String#matches
和regex模式。
final String ALLOWED_CHARS = "01";
String regex = "[" + ALLOWED_CHARS + "]+";
char[] valid = {'0', '0', '1', '0', '0', '0', '1', '1', '0', '1'};
char[] invalid = {'0', '0', '1', '0', '0', 'A', '1', '1', '0', '1'};
String s1 = new String(valid);
String s2 = new String(invalid);
System.out.println(s1 + " valid? " + s1.matches(regex));
System.out.println(s2 + " valid? " + s2.matches(regex));
这个打印:
0010001101 valid? true
00100A1101 valid? false
import java.util.*;
import java.util.stream.*;
class Main {
static final String ALLOWED_CHARS = "01";
public static void main(String[] args) {
char[] valid = {'0','0','1','0','0','0','1','1','0','1'};
char[] invalid = {'0','0','1','0','0','A','1','1','0','1'};
Set<Character> set = ALLOWED_CHARS.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toSet());
isValid(set, valid);
isValid(set, invalid);
}
public static void isValid(Set<Character> set, char[] array) {
for (char c: array) {
if (!set.contains(c)) {
System.out.println("Invalid");
return;
}
}
System.out.println("Valid");
}
}
另一种方法(除了regex) -将ALLOWED_CHARS
添加到Set
并简单检查数组中是否有任何元素不存在于Set
中。