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



我一直在试图弄清楚如何实现一个问题(进一步链接),但是,我碰壁了。

基本上,我必须将使用下一行大括号的源代码重新格式化为行尾大括号。出于某种原因,我班的教授决定在我们的字符串章节中分配这个问题,而不是在文本 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");
        }
    }

相关内容

  • 没有找到相关文章

最新更新