Заменить символы новой строки на \ n, а табуляции на \ t - PullRequest
0 голосов
/ 28 мая 2018

Мне нужно преобразовать исходный код Java из стиля фигурных скобок следующей строки в стиль фигурных скобок конца строки.

Я нашел способ сделать это с отформатированной строкой (с \ n и \ t), и она отлично работает, но я должен прочитать исходный код из файла.

Следующий код

Код стиля следующей скобки:

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    }}

Иэта строка мне не нужна, потому что в ней нет \ n и \ t, от чего зависит код, который я написал.

Пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Все, что вам нужно, это просто 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();
    }
}
0 голосов
/ 28 мая 2018

Вместо использования 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, следовательно, вы не пропустите ни одного символа.

...