我尝试了一个简单的编码练习,但不知为何无法正常工作。这个练习的目标是将一个字符串转换为新字符串,新字符串中的每个字符如果在原字符串中只出现一次,则为 "("
;若出现两次及以上,则为 ")"
。在判断字符是否重复时忽略大小写。
我的测试代码如下:
public class Kata {
public static void main(String[] args) {
String t = "recede";
System.out.println(Kata.encode(t));
}
public static String encode(String word){
StringBuilder result = new StringBuilder();
char[] arr = word.toCharArray();
for (char c : arr) {
Pattern pattern = Pattern.compile("^["
+ c
+ String.valueOf(c).toUpperCase()
+ "]{2,}+$");
Matcher matcher = pattern.matcher(word);
if (matcher.matches())
result.append(")");
else
result.append("(");
}
return result.toString();
}
}
我还尝试过将 matches()
改为 find()
,并且无论输入什么总是得到 "((((("
,在调试过程中发现 if 条件中的匹配结果始终为 false。
另外,我也尝试了其他模式,如 `"["
- c + String.valueOf(c).toUpperCase() + "]{2,}"`,但结果依旧不正确。虽然我知道其他方法可以解决这个问题,但我现在想知道为什么正则表达式和匹配器在此处失效,因为我在 Java 中不止一次遇到这样的问题,在其他语言中却没有类似困扰。