【问题标题】:Java: verify if a string is formed only by letters from another stringJava:验证一个字符串是否仅由另一个字符串中的字母组成
【发布时间】:2017-11-29 17:58:29
【问题描述】:

我想创建一个具有字符串 a 和字符串 b 的函数。我想验证字符串 a 是否仅由字符串 b 中的字符/字母组成。

例如:

字符串 a="abz"; 字符串 b="abecxe";

结果为假,因为字符串 b 不包含字符串 a 中的 'z'。

谢谢!

【问题讨论】:

  • 将字符放入一个集合中,检查来自a的集合中的所有字符是否都在来自b的集合中

标签: java string character


【解决方案1】:

假设您可以编写代码来防止空/无效输入:

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;

再次,您编写验证。

【讨论】:

  • 还不错;根据他的例子,我专注于“字母”而不是任何字符。
【解决方案2】:

一个非常直接的方法是编写一个将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));
}

【讨论】:

    【解决方案3】:

    谢谢大家!

    我解决了字符串匹配的问题(我过去尝试过这种方法但我错了):

    if ( a.matches("[" + b + "]+")) { label1.setText("字符串 a 只包含字符串 b 中的字母!"); } 别的 { label2.setText("字符串 a 包含的字母比字符串 b 多!"); }

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2012-03-13
      • 2012-07-12
      • 2020-07-19
      • 2019-05-11
      • 2011-01-17
      • 2014-02-25
      相关资源
      最近更新 更多