替换字符串中的单词,同时保留原始单词的大小写

时间:2017-03-11 19:17:33

标签: java

将一个字符串中的单词(字符序列)替换为另一个单词(字符序列),同时保留原始字母的情况,这是一种正确的方法 - 最佳实践?具体来说,如果原件全部为大写,则替换字也应该是。如果原件全部为小写,则替换字也应该是。如果原始字母以大写字母开头,其余字母以小写字母开头,那么替换字也应该是。

我目前通过三次条件检查来实现这一点,这对我的目的很有效。但在我看来,必须有一个更好的最佳实践'方式,可能,但不一定,与正则表达式。这是为了讨论现有最佳实践的可能最佳或更好的实践,而非寻求解决已经解决和实施的微不足道的编码问题。

一个具体的例子。在可以在多个平台上运行的应用程序中,所有字符串都包含" click"将被翻译为" tap"当在移动设备上运行时," Click"成为"点击"和"点击"成为" TAP"。在我自己的情况下,我用一个更为一般的方式用一个单词及其替换的映射来做这个,但这是一个具体的例子。

2 个答案:

答案 0 :(得分:1)

给定target子字符串:

  • 创建StringBuilder

  • 逐字循环遍历targetreplacement字符串。

  • 在每次迭代中,检查target字符的大小写。

  • 添加到StringBuilder相应的replacement字符,更改为该情况。

  • 退出循环后,使用replaceAll的{​​{1}}在原始字符串中执行标准target toString

    < / LI>

根据需要调整上述内容StringBuildertargetreplacement,空或不同长度。

答案 1 :(得分:1)

如果不强制使用正则表达式,则可以通过以下方式(在一行中)执行此操作:

s1 = s1.replace(s2, s3.chars().mapToObj(i -> Character.isUpperCase(s2.charAt(s3.indexOf((char)i))) ? Character.toString(Character.toUpperCase((char)i)) : Character.toString(Character.toLowerCase((char)i))).collect(Collectors.joining()));

此处s1是原始字符串,s2是要替换的字符串,s3是替换s2的新字符串,保留s2的情况。