java - 如何使用单个 replaceAll 查找 Java 中两个字符串的公共(public)字符?

标签 java regex optimization string

假设我有:

String s = "1479K";
String t = "459LP";

我想回去

String commonChars = "49";

两个字符串之间的共同字符。

显然可以使用如下标准循环:

String commonChars = "";
for (i = 0; i < s.length; i++)
{
    char ch = s.charAt(i);
    if (t.indexOf(ch) != -1)
    {
        commonChars = commonChars + ch;
    }
}

但是我希望能够使用 replaceAll 在一行中完成此操作。这可以按如下方式完成:

String commonChars = s.replaceAll("["+s.replaceAll("["+t+"]","")+"]","");

我的问题是:是否可以使用一次 replaceAll 调用来做到这一点?什么是正则表达式?我想我必须使用某种前瞻性,但当我想到它时,我的大脑就变成了糊状。

最佳答案

String commonChars = s.replaceAll("[^"+t+"]","");

请注意,您可能需要转义 t 中的特殊字符,例如使用 Pattern.quote(t) 而不是上面的 t

关于java - 如何使用单个 replaceAll 查找 Java 中两个字符串的公共(public)字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4203911/

相关文章:

java - 禁用 Android 菜单组

Java流的处理顺序

php - 使用 preg_match 检查字符串是否仅包含 A-Z、a-z 和 -(破折号)字符

python - 匹配正则表达式或在找不到时保留空字符串

r - 如何优化两个变量函数

java - JIT编译器优化: second method call with same parameter

java.lang.NullPointerException Sun PetStore CatalogFacade

java - 如何从对象列表中获取特定属性?

python - 用可能的多个单词匹配州和城市

javascript - 使用 CSS 分隔词组并强制换行