我正在寻找Java中字符串查找和替换的最佳方法.
这是一句话:"我的名字是米兰,人们都认为我是米兰瓦西奇".
我想用米兰瓦西奇代替米兰,但在我已经有米兰瓦西奇的地方,这应该不是一个案例.
搜索/替换后的结果应该是:"我的名字是米兰瓦西奇,人们都认识我为米兰瓦西奇".
我尝试使用indexOf()以及Pattern/Matcher组合,但我的结果都不优雅,有人有优雅的解决方案吗?
干杯!
(我来自蟒蛇世界,所以我道歉,如果我使用的标准中的一些术语与常规.)
我有String一个List开始/结束索引来代替.没有太多细节,请考虑这个基本的模型:
String text = "my email is foo@bar.com and my number is (213)-XXX-XXXX"
List<Token> findings = SomeModule.someFnc(text);
Run Code Online (Sandbox Code Playgroud)
并Token有定义
class Token {
int start, end;
String type;
}
Run Code Online (Sandbox Code Playgroud)
这List表示我正在尝试编辑的敏感数据的开始和结束位置.
实际上,API返回我迭代的数据以获得:
[{ "start" : 12, "end" : 22, "type" : "EMAIL_ADDRESS" }, { "start" : 41, "end" : 54, "type" : "PHONE_NUMBER" }]
Run Code Online (Sandbox Code Playgroud)
使用这些数据,我的最终目标是编辑text这些Token对象指定的标记,以获得:
"my email is [EMAIL_ADDRESS] and my number is [PHONE_NUMBER]"
Run Code Online (Sandbox Code Playgroud)
使这个问题变得非常重要的是,替换子串的长度并不总是与它们所替换的子串相同.
我目前的行动计划是构建一个StringBuilderfrom text,按照起始索引的相反顺序对这些ID进行排序,然后从缓冲区的右端进行替换. …
我有一组正则表达式替换需要应用于一组字符串,
例如:
("\s{2,}" --> " ")(\.([a-zA-Z]-->". $1") 所以我会有这样的东西:
String s="hello .how are you?";
s=s.replaceAll("\\s{2,}"," ");
s=s.replaceAll("\\.([a-zA-Z])",". $1");
....
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是想象一下我正在尝试替换一个长字符串上的 100 多个这样的表达式。不用说这有多慢。
所以我的问题是是否有一种更有效的方法来使用单个replaceAll(或类似的东西,例如模式/匹配器)来概括这些替换
我已经按照Java替换了多个不同的...,
但问题是我的正则表达式不是simple Strings。
我正在寻找一种方法来替换字符串中的变量值.这是我的字符串:
"cp $myfile1 $myfile2"
Run Code Online (Sandbox Code Playgroud)
事实上,我查看了javadoc,似乎我可以使用String类中的split()方法,但是我也看到了一篇文章,似乎可以用regex和replaceAll()替换所有变量方法.不幸的是,我没有找到最后一个解决方案的任何例子.
在我的情况下是否可以使用replaceAll(带示例)?