【发布时间】:2014-05-17 11:24:48
【问题描述】:
我一直在试图弄清楚如何解决一个问题(进一步向下链接)但是,我碰壁了。
基本上,我必须将使用下一行花括号的源代码重新格式化为行尾花括号。出于某种原因,我班的教授决定将这个问题分配给我们的字符串章节,而不是文本 I/O 章节(大约 5 章之后)。
String sourceString = new String(Files.readAllBytes(Paths.get("Test.txt")));
String formatted = sourceString.replaceAll("\\s\\{", "\\{");
System.out.println(formatted);
这就是我目前所拥有的。当我运行时,输出与源文件相同。我遵循了这个problem 并使用我发现的一个习语将所有文件转换为字符串,replaceAll 方法停止了......替换。
虽然我还是这样设置的
StringBuilder source = new StringBuilder();
while(s.hasNext()){
source.append(s.nextLine());
}
String sourceString = source.toString();
String formatted = sourceString.replaceAll("\\)\\s*\\{", ") {");
System.out.println(formatted);
输出全部在一行上。我觉得 replaceAll 方法根本没有发生。我觉得我忘记了一些明显的事情。
【问题讨论】:
-
基本检查:
nextLine是否也附加回车,还是自动丢弃?如果是后者,则需要自己添加。 -
如果我用 s.nextLine() + "\r" 附加它,输出将与我的第一次尝试相同(使用 readAllBytes)。
-
你的正则表达式不能处理多行,你需要
Pattern.DOTALL
标签: java string file curly-braces