我正在尝试编写一个通用方法,该方法将在文件中搜索给定字符串并将其替换为另一个字符串。我正在使用java正则表达式
patternMatcher = Pattern.compile(searchString);
while ((line = readLine()) != null) {
Matcher regexMatcher = patternMatcher.matcher(line);
if (regexMatcher.lookingAt()) {
line = regexMatcher.replaceAll(replaceString);
..等等
只要搜索字符串位于文件中每行的开头,此逻辑就可以正常工作。否则不会发生模式匹配。有人可以建议一个解决方案吗?
例如。我的搜索字符串是“This”,Replace字符串是“That”
输入文件包含:This is not This funny
输出:That is not That funny
但是当时
输入文件包含:007 This is not This funny
输出:007 This is not This funny
答案 0 :(得分:1)
不应该......?
patternMatcher = Pattern.compile(searchString);
while ((line = readLine()) != null) {
Matcher regexMatcher = patternMatcher.matcher(line);
while (regexMatcher.find()) {
line = regexMatcher.replaceAll(replaceString);
考虑到quatifier可能会影响结果,perhapaps搜索字符串应为“(this)+”或“(this)+?”。
答案 1 :(得分:0)
如果您正在搜索常量字符串而不是模式,那么您应该使用正则表达式的原因有很多:
改为使用String.indexOf
和/或String.replace
。
while ((line = readLine()) != null)
if (line.indexOf(searchString) != -1 )
line.replace(searchString, replaceString);
答案 2 :(得分:0)
我不熟悉Java,但根据文档,lookingAt
查看字符串的开头。我会跳过寻找比赛并盲目地运行replaceAll
,无论是否匹配;如果没有匹配,它将不会取代任何内容。
如果由于某种原因你需要在尝试替换之前寻找匹配(这很浪费),正确的函数是find
。见http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html
答案 3 :(得分:0)
如果内存不是问题,您可以将整个文件读作String并在String API中使用public String replaceAll(String regex, String replacement)
。