繁体   English   中英

用\\ n替换换行符,并用\\ t替换制表符

[英]Replace newlines with \n and tabs with \t

我必须将Java源代码从下一行大括号样式转换为行尾大括号样式。

我找到了一种使用格式化的字符串(带有\\ n和\\ t的字符串)来执行此操作的方法,它可以正常工作,但是我必须从File中读取源代码。

以下代码

下一行大括号样式代码:

public class Test
{
    public static void main(String[] args)
    {
        // Some statements
    }
}

应该转换为:

public class Test {
    public static void main(String[] args) {
        // Some statements
    }
}

现在,我的解决方法如下:

上面提到的带有\\ n和\\ t的代码如下(我们将其命名为String s2

public class Test\n" +
                "{\n" +
                "\tpublic static void main(String[] args)\n" +
                "\t{\n" +
                "\t\t// Some statements\n" +
                "\t}\n" +
                "}\n

然后,我编写了以下代码,将其转换为行尾样式。

s2 = s2.replaceAll("\\t\\{", "{");
StringBuilder stringBuilder = new StringBuilder(s2);

for (int i = 0; i < stringBuilder.length(); i++) {
    if (stringBuilder.charAt(i) == '{') {
        stringBuilder.deleteCharAt(i);
        stringBuilder.insert(i - 1, " {");
    }
}

据我检查,这有效。


现在是实际问题;

当我从文件中读取时,源代码没有\\ t和\\ n,我想将源代码转换为字符串,就像上面的字符串(s2)具有\\ t和\\ n一样。


为了澄清起见,我使用以下方法从输入中读取内容:

File sourceFile = new File("oldFormattedSourceCode.txt");
String oldFormatString = "";
try (Scanner input = new Scanner(sourceFile);) {
    while (input.hasNext()) {
        oldFormatString += input.nextLine();
    }
    System.out.println("Old Format String is: " + oldFormatString.toString());
} catch (FileNotFoundException ex) {
    System.out.print(ex.getMessage());

}

这给了我以下输出

Old Format String is: public class Test{    public static void main(String[] args)    {        // Some statements    }}

而且这个String对我没有用,因为它没有\\ n和\\ t,我编写的代码取决于这些。

请提出建议。

而不是使用Scanner读取文件,而是使用FileReader

try (FileReader input = new FileReader(sourceFile);) {
    int i = 0;
    StringBuffer sb = new StringBuffer();
    while ((i=input.read())!=-1) {
        sb.append((char)i);
    }
    oldFormatString = sb.toString();
    System.out.println("Old Format String is: " + oldFormatString.toString());
} catch (FileNotFoundException | IOException ex) {
    System.out.print(ex.getMessage());
}

如果使用FileReader ,则可以读取单个字符,因此不会丢失任何字符。

您只需要StringBuilder并逐行检查输入文件:

private static String convert(File file) throws FileNotFoundException {
    final String lineSeparator = System.getProperty("line.separator");
    StringBuilder buf = new StringBuilder();

    try (Scanner scan = new Scanner(file)) {
        while (scan.hasNext()) {
            String line = scan.nextLine();

            if ("{".equals(line.trim()))
                buf.append(" {").append(lineSeparator);
            else {
                if (buf.length() > 0)
                    buf.append(lineSeparator);

                buf.append(line);
            }
        }

        return buf.toString();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM