重新格式化Java源代码,而不是下一行使用行尾大括号

重新格式化Java源代码,而不是下一行使用行尾大括号,java,string,file,curly-braces,Java,String,File,Curly Braces,我一直在试图找出如何实现一个问题(向下链接),但是,我遇到了麻烦 基本上,我必须重新格式化使用下一行大括号到行尾大括号的源代码。出于某种原因,我们班的教授决定将这个问题分配到我们的字符串章节,而不是文本I/O章节(大约5章之后) 这就是我目前所知道的。运行时,输出与源文件相同。我遵循这一点,使用我发现的习惯用法将所有文件转换为字符串,replaceAll方法停止了。。。替换 当我还把它设置成这样的时候 StringBuilder source = new StringBuilder();

我一直在试图找出如何实现一个问题(向下链接),但是,我遇到了麻烦

基本上,我必须重新格式化使用下一行大括号到行尾大括号的源代码。出于某种原因,我们班的教授决定将这个问题分配到我们的字符串章节,而不是文本I/O章节(大约5章之后)

这就是我目前所知道的。运行时,输出与源文件相同。我遵循这一点,使用我发现的习惯用法将所有文件转换为字符串,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()的第二个参数是一个字符串,而不是正则表达式,因此不需要在那里转义
{

还可以添加+来表示一个或多个空格

因此:


如果不想使用
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");
        }
    }