当前位置: 首页 > 面试题库 >

一次替换多个子字符串

景正文
2023-03-14
问题内容

说我有一个文件,其中包含一些文本。其中包含子字符串,例如“ substr1”,“ substr2”,“
substr3”等。我需要将所有这些子字符串替换为其他文本,例如“ repl1”,“ repl2”,“
repl3”。在Python中,我将创建一个这样的字典:

{
 "substr1": "repl1",
 "substr2": "repl2",
 "substr3": "repl3"
}

并创建用’|’组合键的模式,然后替换为re.subfunction。在Java中有类似的简单方法吗?


问题答案:

这是您的Python建议如何转换为Java的方式:

Map<String, String> replacements = new HashMap<String, String>() {{
    put("substr1", "repl1");
    put("substr2", "repl2");
    put("substr3", "repl3");
}};

String input = "lorem substr1 ipsum substr2 dolor substr3 amet";

// create the pattern joining the keys with '|'
String regexp = "substr1|substr2|substr3";

StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(input);

while (m.find())
    m.appendReplacement(sb, replacements.get(m.group()));
m.appendTail(sb);


System.out.println(sb.toString());   // lorem repl1 ipsum repl2 dolor repl3 amet

这种方法可以 同时 (即“一次”)进行替换。即,如果您碰巧有

"a" -> "b"
"b" -> "c"

那么这种方法会给出"a b" -> "b c"与答案相反的答案,提示您应该将多个呼叫链接到replacereplaceAll会给出答案"c c"

(如果您一般化此方法以编程方式创建正则表达式,请确保您Pattern.quote每个单独的搜索词和Matcher.quoteReplacement每个替换词。)



 类似资料:
  • 问题内容: 在JavaScript中有一个简单的等效项吗? 这是使用PHP的,它允许您使用单词数组来查找和替换。我可以使用JavaScript / jQuery做类似的事情吗? 问题答案: 您可以使用自己的函数来扩展String对象,该函数可以满足您的需要(如果缺少功能,则很有用): 对于全局替换,您可以使用正则表达式: 要使用该功能,它将类似于您的PHP示例:

  • 问题内容: 我想使用函数替换多个字符串。 我目前有 但想有类似的东西 虽然那听起来不像是好的语法 正确的方法是什么?有点像如何在中进行操作\1以及\2如何将字段替换为某些搜索字符串 问题答案: 这是一个简短的示例,应该使用正则表达式来解决问题: 例如: ’() and –text–‘

  • 问题内容: 一个非常简单的小问题,但是我不太明白该怎么做。 我需要将’_’的每个实例替换为空格,并将’#’的每个实例替换为空/空。 我已经试过了: 我真的不喜欢这样的链接命令。还有另一种方法可以做到这一点吗? 问题答案: 使用OR运算符(): 您还可以使用字符类: Fiddle 如果您想用一件事替换哈希值,而用另一件事替换下划线,则只需要链接即可。但是,您可以添加一个原型: 但是为什么不连锁呢?我

  • 我真的不喜欢这样链接命令。有没有另一种方法在一个做?

  • 我需要以最有效的方式替换一个字符串中许多不同的子字符串。除了使用string.replace替换每个字段的蛮力方法之外,还有其他方法吗?

  • 我有一个字符串原型,其代码如下所示: 用法: