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

当替换文本与搜索文本重叠时,替换Java中的多个子字符串

宗政财
2023-03-14
问题内容

说您有以下字符串

cat dog fish dog fish cat

要替换所有catsdogs,都dogs具有fish,和所有fishcats。直观地,预期结果:

dog fish cat fish cat dog

如果您尝试使用显而易见的解决方案,并通过进行遍历replaceAll(),则会得到:

  1. (原版的) cat dog fish dog fish cat
  2. (猫->狗) dog dog fish dog fish dog
  3. (狗->鱼) fish fish fish fish fish fish
  4. (鱼->猫) cat cat cat cat cat cat

显然,这不是预期的结果。那么最简单的方法是什么?我可以Pattern和and Matcher(以及很多Pattern.quote()and
Matcher.quoteReplacement())一起拼凑一些东西,但是我拒绝相信我是第一个遇到这个问题的人,并且没有库函数可以解决它。

(FWIW,实际情况有点复杂,不涉及直接交换。)


问题答案:

似乎Apache
Commons中的StringUtils.replaceEach可以满足您的要求:

StringUtils.replaceEach("abcdeab", new String[]{"ab", "cd"}, new String[]{"cd", "ab"});
// returns "cdabecd"

请注意,以上链接中的文档似乎有误。有关详细信息,请参见下面的评论。



 类似资料:
  • 我试图开发一个由多个数组和文本视图组成的应用程序,我遇到了一个问题。 我有3个文本视图和2个数组。 我的一个数组包含句子。我的第一个问题是如何突出每个句子中的特定单词?例如:“这是我的第一个数组项”,我需要突出显示字符串中的一个单词,这样当它显示在文本视图1中时,它就会像这样出现..."这是我的第一个数组物品" 我的另一个数组包含单词。它们显示在textview2中,也应高亮显示。我的下一个问题是

  • 问题内容: 我有一个名为log.txt的文本文件,它具有以下数据 第一个逗号之前的数字是指定每个项目的索引。 我想做的是读取文件,然后将给定行中字符串的一部分(例如textFiles / a.txt)替换为另一值(例如something / bob.txt)。 这就是我到目前为止 问题答案: 一种方法是使用: 您还可以使用正则表达式,或查找搜索字符串在一行中的何处。

  • 问题内容: 在表的一个特定字段中将进行文本搜索和替换的是哪种MySQL查询? 即搜索并替换为具有值的字段的记录变为。 问题答案: 更改并匹配您的表名和相关字段: 替换(字符串函数) INSTR(字符串函数)

  • 我想在文本文件中用新的英文字符替换突厥语字符{code>{c',c',I',I',G',G',S',S}。 这是我的密码。我在控制台上只获得原始内容,没有任何更改,也不会创建新文件。 编辑: 这是适用于我的新代码。但是我想使用一个较短的代码来替换方法。

  • 问题内容: 如何使用Python 3搜索和替换文件中的文本? 这是我的代码: 输入文件: 当我在上面的输入文件中搜索并将“ ram”替换为“ abcd”时,它起了一种魅力。但是,反之亦然,即用“ ram”替换“ abcd”时,一些垃圾字符会保留在末尾。 用“ ram”代替“ abcd” 问题答案: fileinput已经支持就地编辑。stdout在这种情况下,它将重定向到文件:

  • 我有一个文件,其中包含以下格式的正则表达式和替换文字字符串列表: 我想替换所有匹配的字符串与在多个文件。 我相信这是一个常见的问题,以前应该有人做过类似的事情,但我就是找不到用bash编写的现有解决方案。 例如: 输入: 预期产出: 主要挑战是: 要替换的字符串由POSIX扩展正则表达式描述,而不是文字,任何不是POSIX ERE元字符的字符,包括经常被一些工具用作regexp分隔符的,都必须被视