【发布时间】:2017-11-29 17:58:29
【问题描述】:
我想创建一个具有字符串 a 和字符串 b 的函数。我想验证字符串 a 是否仅由字符串 b 中的字符/字母组成。
例如:
字符串 a="abz"; 字符串 b="abecxe";结果为假,因为字符串 b 不包含字符串 a 中的 'z'。
谢谢!
【问题讨论】:
-
将字符放入一个集合中,检查来自a的集合中的所有字符是否都在来自b的集合中
我想创建一个具有字符串 a 和字符串 b 的函数。我想验证字符串 a 是否仅由字符串 b 中的字符/字母组成。
例如:
字符串 a="abz"; 字符串 b="abecxe";结果为假,因为字符串 b 不包含字符串 a 中的 'z'。
谢谢!
【问题讨论】:
假设您可以编写代码来防止空/无效输入:
return b.replaceAll("["+a+"]", "").length() == 0;
正如所指出的,这对于任意字符串都会失败。
for (int i = 0; i < b.length(); i++) {
if (!a.contains(b.substring(i, i + 1)) {
return false;
}
}
return true;
再次,您编写验证。
【讨论】:
一个非常直接的方法是编写一个将String 转换为一组字符的方法,然后利用Set 接口的removeAll 方法。您可能需要 Apache ArrayUtils 类将 char[] 从您的 String 转换为 Character[]。
它可能看起来像这样。
public static boolean containsOnlyCharactersFrom(String first, String second) {
return charactersIn(first).removeAll(charactersIn(second)).isEmpty();
}
private static Set<Character> charactersIn(String argument) {
Character[] characterArray = ArrayUtils.toObject(argument.toCharArray());
return new HashSet<Character>(Arrays.asList(characterArray));
}
【讨论】:
谢谢大家!
我解决了字符串匹配的问题(我过去尝试过这种方法但我错了):
if ( a.matches("[" + b + "]+")) { label1.setText("字符串 a 只包含字符串 b 中的字母!"); } 别的 { label2.setText("字符串 a 包含的字母比字符串 b 多!"); }【讨论】: