我正在努力提高我的编码技能并偶然发现了这个任务: "本练习的目的是将字符串转换为新字符串,其中新字符串中的每个字符都是'('如果该字符在原始字符串中只出现一次,或者' ;)'如果该字符在原始字符串中出现多次。在确定字符是否重复时忽略大小写。" 您可以在下面看到我的解决方案,其中出现以下错误:
线程中的异常" main" java.util.regex.PatternSyntaxException:索引1附近的未闭合组 ( ^
我不明白为什么会出现这个错误,我甚至没有使用任何类型的组匹配/模式等。我想我知道它为什么会出现,但修复工作不起作用(如果关闭的话)这在下面的代码中评论)
我的代码对你来说似乎很愚蠢,我试图通过首先创建一个hashmap来解决给定的任务,其中我存储每个char并为其键赋值(或)取决于它在给定单词中出现的次数。后来,我遍历我的整个HashMap并用它们的值替换键的所有出现,我认为这可能是有效的。至少你现在知道我为什么要实现它,它适用于不包含像空格和括号这样的特殊字符的字符串。
哦,顺便说一句,即使在阅读了与我有关的问题后,我也无法自己找到问题,这让我感到很沮丧。如果您对我如何更成功地解决这些问题有一般性的建议,我会很高兴听到您的建议!
import java.util.HashMap;
public class DuplicateEncoder {
static String encode(String word) {
HashMap<Character, Character> replaceMap = new HashMap<>();
char[] charArray = word.toLowerCase().toCharArray();
for (char c : charArray) {
if (!replaceMap.containsKey(c)) {
int count = 0;
for (char c2 : charArray) {
if (c2 == c) {
count++;
}
}
if (count > 1) {
replaceMap.put(c, ')');
} else {
replaceMap.put(c, '(');
}
}
}
String result = word.toLowerCase();
for (char c : replaceMap.keySet()) {
// if(result.indexOf(c)>=0) {
result = result.replaceAll(Character.toString(c), Character.toString(replaceMap.get(c)));
// }
}
return result;
}
public static void main(String[] args){
String s = "Prespecialized";
System.out.println(DuplicateEncoder.encode(s));
s = " ()( ";
System.out.println(DuplicateEncoder.encode(s));
}
}
答案 0 :(得分:1)
你在这里使用正则表达式:
result = result.replaceAll(Character.toString(c), Character.toString(replaceMap.get(c)));
// }
检查String.replaceAll
个文档。如果您的角色是'('您收到此例外。请尝试String.replace(char, char)
而不是