将一个字符串中的单词(字符序列)替换为另一个单词(字符序列),同时保留原始字母的情况,这是一种正确的方法 - 最佳实践?具体来说,如果原件全部为大写,则替换字也应该是。如果原件全部为小写,则替换字也应该是。如果原始字母以大写字母开头,其余字母以小写字母开头,那么替换字也应该是。
我目前通过三次条件检查来实现这一点,这对我的目的很有效。但在我看来,必须有一个更好的最佳实践'方式,可能,但不一定,与正则表达式。这是为了讨论现有最佳实践的可能最佳或更好的实践,而非寻求解决已经解决和实施的微不足道的编码问题。
一个具体的例子。在可以在多个平台上运行的应用程序中,所有字符串都包含" click"将被翻译为" tap"当在移动设备上运行时," Click"成为"点击"和"点击"成为" TAP"。在我自己的情况下,我用一个更为一般的方式用一个单词及其替换的映射来做这个,但这是一个具体的例子。
答案 0 :(得分:1)
给定target
子字符串:
创建StringBuilder
。
逐字循环遍历target
和replacement
字符串。
在每次迭代中,检查target
字符的大小写。
添加到StringBuilder
相应的replacement
字符,更改为该情况。
退出循环后,使用replaceAll
的{{1}}在原始字符串中执行标准target
toString
。
根据需要调整上述内容StringBuilder
和target
为replacement
,空或不同长度。
答案 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的情况。