我正在制作一个程序,涉及编辑文件并用路径替换占位符。
以下是代码:
List<String> lines = Files.readAllLines(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath());
int index = -1;
for (String s : lines){
index++;
if (s.contains("PROGRAM/GAMEDIRPATH")) break;
}
String k = lines.get(index);
k = k.replaceAll("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath());
lines.set(index, k);
clearFile(new File(new File(basepath, "Game"), "launcher_profiles.json"));
Files.write(new File(new File(basepath, "Game"), "launcher_profiles.json").toPath(), lines, StandardOpenOption.CREATE);
basepath,“Game”文件路径没有问题,因为在我的程序中的每个其他位置,它都包含斜杠。只有在这部分中,它才会替换不包含斜杠的占位符。
例如,而不是 C:/ Users \ name \ Documents \ program \ Game,它返回UsersnameDocumentsprogramGame。
正如我之前所说,在所有其他地方,它返回正确的路径名(带斜杠)。 在Mac上,所有斜杠都在那里,即使在这部分也是如此。
有人知道修复吗?谢谢。
答案 0 :(得分:4)
来自String.replaceAll
方法的文档:
请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll
。如果需要,使用Matcher.quoteReplacement
来抑制这些字符的特殊含义。
答案 1 :(得分:1)
您已使用replaceAll方法将字符串的一部分替换为其他内容。我认为replaceAll方法的第一个参数采用字符串,但它被视为正则表达式,我认为参数中的斜杠&#34; PROGRAM / GAMEDIRPATH&#34;触发了一些事情。
只需删除replaceAll方法并使用replace方法,因为replace()方法将characterSequence作为参数。这不是替换所有字符串的解决方案,但至少你会知道原因。
k = k.replace("PROGRAM/GAMEDIRPATH", new File(basepath, "Game").getPath());
编辑:你的代码在linux上工作正常,它显示k的值为 /家庭/用户名/文件/游戏
在Windows上,使用正则表达式时可能需要搜索转义字符