使用方法String.replaceAll时出错

时间:2018-01-13 02:14:14

标签: java

我使用此代码从JTextArea获取字符串,然后从我从JTextArea获得的字符串中逐字符串替换。

String data = MainTextArea.getText().toString();
data = data.replaceAll("(", "<");
MainTextArea.setText(data);

我在这段代码的第二行写了一个错误:

  

线程中的异常&#34; AWT-EventQueue-0&#34;   java.util.regex.PatternSyntaxException:索引1附近的未闭合组

我该怎么做才能解决这个问题?

我不知道是否应该提供更多有关问题的信息。

更新:

我正在使用HashMap<string,string>来替换许多字符串,这些字符串可能包含一些像"("这样的字符,它需要\之前如何知道这个字符串需要那些\当我使用这部分代码时

for (Map.Entry<String, String> entry : settingfile.CharactersMap.entrySet()) {
    System.out.println(entry.getKey() + " | " + entry.getValue());
    data = data.replaceAll(entry.getKey(), entry.getValue());
}

2 个答案:

答案 0 :(得分:1)

您需要使用(转义\\。试试这个:

data = data.replaceAll("\\(", "<");

Docs for replaceAll()

正如Jon Skeet指出的那样,使用replace

会很简单
data = data.replace('(', '<');

答案 1 :(得分:0)

来自这个家庭public String replace(char oldChar, char newChar)的不同方法不会使用正则表达式机制。

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace(char,%20char)

所以你的代码可以是

data = data.replace('(', '<');

希望,非正则表达式版本也有更好的表现