重新格式化Java源代码,而不是下一行使用行尾大括号
我一直在试图找出如何实现一个问题(向下链接),但是,我遇到了麻烦 基本上,我必须重新格式化使用下一行大括号到行尾大括号的源代码。出于某种原因,我们班的教授决定将这个问题分配到我们的字符串章节,而不是文本I/O章节(大约5章之后) 这就是我目前所知道的。运行时,输出与源文件相同。我遵循这一点,使用我发现的习惯用法将所有文件转换为字符串,replaceAll方法停止了。。。替换 当我还把它设置成这样的时候重新格式化Java源代码,而不是下一行使用行尾大括号,java,string,file,curly-braces,Java,String,File,Curly Braces,我一直在试图找出如何实现一个问题(向下链接),但是,我遇到了麻烦 基本上,我必须重新格式化使用下一行大括号到行尾大括号的源代码。出于某种原因,我们班的教授决定将这个问题分配到我们的字符串章节,而不是文本I/O章节(大约5章之后) 这就是我目前所知道的。运行时,输出与源文件相同。我遵循这一点,使用我发现的习惯用法将所有文件转换为字符串,replaceAll方法停止了。。。替换 当我还把它设置成这样的时候 StringBuilder source = new StringBuilder();
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()的第二个参数是一个字符串,而不是正则表达式,因此不需要在那里转义
{
还可以添加+来表示一个或多个空格
因此:
如果不想使用
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");
}
}
基本检查:
nextLine
是否也附加回车符,还是自动放弃?如果是后者,您需要自己添加。如果我用s.nextLine()+“\r”附加它,输出将与我的第一次尝试相同(使用readAllBytes).you regex不处理多行,您需要模式。DOTALL
为此,如果我只使用一个\,我会得到一个无效的转义序列。我现在看到了我的错误。我没有费心编辑\(out),我只是检查输出的第一行,它不包含(.I)我将它更改为您的行,现在可以工作了。
sourceString.replaceAll("\\s+\\{", "{")
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");
}
}