我一直在试图弄清楚如何实现一个问题(进一步链接),但是,我碰壁了。
基本上,我必须将使用下一行大括号的源代码重新格式化为行尾大括号。出于某种原因,我班的教授决定在我们的字符串章节中分配这个问题,而不是在文本 I/O 章节(大约 5 章后)中分配这个问题。
String sourceString = new String(Files.readAllBytes(Paths.get("Test.txt")));
String formatted = sourceString.replaceAll("\s\{", "\{");
System.out.println(formatted);
这就是我目前所拥有的。当我运行时,输出与源文件相同。我遵循了这个问题,并使用我发现的成语将所有文件转换为字符串,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 方法根本没有发生。我觉得我忘记了一些显而易见的事情。
replaceAll() 的第二个参数是一个字符串,而不是正则表达式,所以不需要在那里转义{
。
还要添加一个 + 来表示一个或多个空格。
所以:
sourceString.replaceAll("\s+\{", "{")
如果您想在不使用replaceAll()
和regex
的情况下执行此操作,请尝试以下方法:
String nextLine = null;
String currentLine = null;
while (s.hasNext()) {
currentLine = s.nextLine();
if (currentLine.trim().endsWith(")")) {
while(s.hasNext()){
if((nextLine = s.nextLine()).trim().length() != 0){
break;
}
}
if (nextLine.trim().equals("{")) {
source.append(currentLine).append(" {").append("n");
} else {
source.append(currentLine).append("n");
}
} else {
source.append(currentLine).append("n");
}
}