PatternSyntaxException:索引附近的未关闭组1.为什么我的检查不起作用?

时间:2017-10-07 07:41:39

标签: java regex string pattern-matching

我正在努力提高我的编码技能并偶然发现了这个任务: "本练习的目的是将字符串转换为新字符串,其中新字符串中的每个字符都是'('如果该字符在原始字符串中只出现一次,或者' ;)'如果该字符在原始字符串中出现多次。在确定字符是否重复时忽略大小写。" 您可以在下面看到我的解决方案,其中出现以下错误:

线程中的异常" 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));
}


}

1 个答案:

答案 0 :(得分:1)

你在这里使用正则表达式:

  result = result.replaceAll(Character.toString(c), Character.toString(replaceMap.get(c)));
      //  }

检查String.replaceAll个文档。如果您的角色是'('您收到此例外。请尝试String.replace(char, char)而不是