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

时间:2014-04-04 23:43:54

标签: java string file curly-braces

我一直试图弄清楚如何实施问题(进一步关联),但是,我正在撞墙。

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

String sourceString = new String(Files.readAllBytes(Paths.get("Test.txt")));
String formatted = sourceString.replaceAll("\\s\\{", "\\{");
System.out.println(formatted);

这就是我到目前为止所拥有的。当我运行时,输出与源文件相同。我按照这个problem并使用我发现将所有文件转换为String的惯用语,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方法根本就没有发生。我觉得我忘记了一些明显的东西。

2 个答案:

答案 0 :(得分:1)

replaceAll()的第二个参数是一个String,而不是一个正则表达式,所以不需要在那里转义{

还要添加一个+来表示一个或多个空格。

所以:

sourceString.replaceAll("\\s+\\{", "{")

答案 1 :(得分:0)

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