Новые строки в исходных файлах Java: как проверить их с помощью класса Character? - PullRequest
0 голосов
/ 04 февраля 2012

Написание лексера исходных файлов .java на Java.У меня есть поток символов, и я пытаюсь заставить лексера пропустить однострочные комментарии.

Я перебираю каждый символ, и моя гипотеза заключается в том, что должна быть возможность сначала обнаружить // комментарий, а затем пропустить последующие символы до следующего символа новой строки.Но это не может работать, и я не могу обнаружить любой символ новой строки.Это мой код:

//is it a single line comment?
if(currentChar == '/') {

    //loop through char:s until next new line
    while(inComment == true) {
        //increment loop
        i++;

        //extract next char
        currentChar = stringInput.charAt(i);

        //check if current character is a new line
        if(( currentChar == '\n' ) || ( currentChar == '\r' )) {
            inComment = false;
            System.out.println("End Of Line Comment.");                             
        }
    }
}

Итак, есть ли в исходных файлах .java символы новой строки?Можно ли их обнаружить с помощью класса Character или любым другим способом?

Заранее большое спасибо!

РЕШЕНИЕ:

Новая строкакажется, что символы теряются при чтении кода из исходного файла .java с использованием BufferedReader и добавлении строк в StringBuilder.Проблема была решена путем чтения файла .java с использованием readFileToString () из org.apache.commons.io.FileUtils, что сработало!

Ответы [ 3 ]

1 голос
/ 04 февраля 2012

Как вы читаете stringInput? Если вы используете readLine, почему бы просто не следовать этому псевдо-коду:

if (stringInput starts with "//")
    readNextLine()

Намного короче и легче следовать. Подсказка : чтение API-интерфейса String.

0 голосов
/ 04 февраля 2012

Между вашим условием if и циклом while вы устанавливаете значение inComment в true?Также вы должны проверить на две косые черты.

0 голосов
/ 04 февраля 2012

Это должно сработать, сравнение currentChar == '\ n' должно работать нормально и возвращать true, когда вы достигли конца строки.

Вы уверены, что разрывы строк уже не теряются?при чтении в файле, например, с помощью BufferedReader.readLine ()?Если это так, попробуйте другой способ прочитать файл в строку, например, используйте FileUtils.readFileToString из jakarta commons-io.

...