java - 以更有效的方式替换字符串中的一组子字符串?

标签 java regex string

例如,我必须用另一个子字符串替换字符串中的一组子字符串

  1. "^t""\t"
  2. "^=""\u2014"
  3. "^+""\u2013"
  4. "^s""\u00A0"
  5. "^?""."
  6. "^#""\\d"
  7. "^$"[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()); 

但它不起作用。 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);

这是一个 online code demo .


为了完整性,您可以使用二维数组进行类似的处理:

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);

关于java - 以更有效的方式替换字符串中的一组子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914113/

相关文章:

java - Spring Roo DBRE 使用 GWT 生成项目的问题

regex - 崇高文字立即将多个重音字符替换为无重音字符

python - 正则表达式匹配到以 `- [` 开头的最后一行

c# - 如何将字符串转换为点?

regex - 多分隔符日期正则表达式

ruby - 如何将字符串转换为数组?

string - 我可以在不更改项目顺序的情况下将 JSON 字符串转换为 Flex ArrayCollection 吗?

java - 有没有一种简单的方法可以判断 StackTraceElement 是否来自您的源代码?

java - 如何正确施法?

java - 通过在 JSP 页面中使用预先挂起的 "get"来别名对象方法