【问题标题】:Reformatting Java Source Code, instead of next line use end of line curly braces重新格式化 Java 源代码,而不是下一行使用行尾花括号
【发布时间】: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


【解决方案1】:

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

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

所以:

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

【讨论】:

  • 如果我只使用一个 \,我会得到一个无效的转义序列。
  • 我现在明白我的错误了。我没有费心编辑 \( 输出,我只是检查不包含 ( 的输出的第一行。我将其更改为您的行,它现在可以工作了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 2021-06-17
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2016-08-17
    • 2021-01-20
    • 2016-10-11
    相关资源
    最近更新 更多