我要用String中的一组子串替换另一个子串,例如
"^t" 同 "\t""^=" 同 "\u2014""^+" 同 "\u2013""^s" 同 "\u00A0""^?" 同 ".""^#" 同 "\\d""^$" 同 "[a-zA-Z]"所以,我试过:
String oppip = "pippo^t^# p^+alt^shefhjkhfjkdgfkagfafdjgbcnbch^";
Map<String,String> tokens = new HashMap<String,String>();
tokens.put("^t", "\t");
tokens.put("^=", "\u2014");
tokens.put("^+", "\u2013");
tokens.put("^s", "\u00A0");
tokens.put("^?", ".");
tokens.put("^#", "\\d");
tokens.put("^$", "[a-zA-Z]");
String regexp = "^t|^=|^+|^s|^?|^#|^$";
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(oppip);
while (m.find())
m.appendReplacement(sb, tokens.get(m.group()));
m.appendTail(sb);
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)
但它不起作用.tokens.get(m.group())抛出一个例外.
知道为什么吗?
你不必使用HashMap.考虑使用简单数组和循环:
String oppip = "pippo^t^# p^+alt^shefhjkhfjkdgfkagfafdjgbcnbch^";
String[] searchFor =
{"^t", "^=", "^+", "^s", "^?", "^#", "^$"},
replacement =
{"\\t", "\\u2014", "\\u2013", "\\u00A0", ".", "\\d", "[a-zA-Z]"};
for (int i = 0; i < searchFor.length; i++)
oppip = oppip.replace(searchFor[i], replacement[i]);
// Print the result.
System.out.println(oppip);
Run Code Online (Sandbox Code Playgroud)
这是一个在线代码演示.
为了完整性,您可以使用二维数组来实现类似的方法:
String oppip = "pippo^t^# p^+alt^shefhjkhfjkdgfkagfafdjgbcnbch^";
String[][] tasks =
{
{"^t", "\\t"},
{"^=", "\\u2014"},
{"^+", "\\u2013"},
{"^s", "\\u00A0"},
{"^?", "."},
{"^#", "\\d"},
{"^$", "[a-zA-Z]"}
};
for (String[] replacement : tasks)
oppip = oppip.replace(replacement[0], replacement[1]);
// Print the result.
System.out.println(oppip);
Run Code Online (Sandbox Code Playgroud)
在正则表达式中,^意思是"文本开头"(或在字符类中"不"作为否定).你必须在它之前放一个反斜杠,它在java String中变成两个反斜杠.
String regexp = "\\^[t=+s?#$]";
Run Code Online (Sandbox Code Playgroud)
我进一步减少了它.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |