gpt4 book ai didi

java - 使用 String Replace(old, new) ,其中 "old"之前的字符不是字母表

转载 作者:行者123 更新时间:2023-11-30 01:56:59 28 4
gpt4 key购买 nike

我正在尝试编写一个小程序来替换从 Excel 文件中读取的单词。旧词和新词的格式相同,some_thing_else 或 Some_Thing_else。考虑下面的 2 个单词及其替换:

something_else > whatever_else  
thing_else > foo_bar

问题是,当需要替换文本时,String.replace 替换了 Something_else 中的“thing_else”,因此它变成了 somefoo_bar。有没有办法我可以指定replace(oldString, newString)仅在oldString之前的字符不是[a-zA-Z]时才有效。

我尝试使用这些正则表达式中的任何一个并切换到 replaceAll()。但我意识到它不起作用,因为 replaceAll() 会尝试匹配我的字符串,其中我的字符串不以字母开头......

String regex = "^[a-zA-Z]";
String regex2 = "(?<![a-zA-Z])";

这是我的其余代码:

oldNamesnewNames 是分别包含旧字符串和新字符串的 arrayLists

Path path = Paths.get(filePath);
String content = new String(Files.readAllBytes(path), charset);

for(int i = 0; i < oldNames.size(); i++) {
if(StringUtils.isNotBlank(oldNames.get(i))) {
if(StringUtils.isNotBlank(newNames.get(i))){

oldString = oldNames.get(i) + regex2;

content = content.replaceAll(oldString, newNames.get(i));

Files.write(path, content.getBytes(charset));
}
}
}

最佳答案

单词边界正则表达式对我有用。另外,这个问题是重复的,直到我搜索“WordboundaryreplaceAll()”才发现这个问题......哦,好吧。

对于任何人来说,我现在传递给replaceAll()的参数是:

String regex = "\\b" + oldName.get(i) + "\\b";
content = replaceAll(regex, newName);

关于java - 使用 String Replace(old, new) ,其中 "old"之前的字符不是字母表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54085698/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com