проверить, является ли строка действительной или нет в Java - PullRequest
2 голосов
/ 11 июня 2010

Я бы хотел проверить следующее:

VALID LINES;
/**/ some code
*/ some code   /** dsfsdkf sd**/

NOT VALID LINES;
/**/ //some code
*/ /***/ //somecode

То есть, если за комментарием есть строка кода, она действительна, в противном случае - нет.

Каков наилучший способ справиться с такой проверкой?

Примечание:
Для */ я предполагаю, что /* был открыт несколькими строками раньше.

Ответы [ 4 ]

3 голосов
/ 11 июня 2010

Я полагаю, это должно быть довольно быстро.

import java.io.*;

class Test {

    public static void main(String[] args) throws IOException {
        StringBuffer buf = new StringBuffer();
        BufferedReader r = new BufferedReader(new FileReader("src/Test.java"));

        final String nl = System.getProperty("line.separator");
        String line;
        while (null != (line = r.readLine()))
            buf.append(line).append(nl);

        for (String code : buf.toString().split("(?ms)/\\*.*?\\*/|//[^\\n]*"))
            System.out.println(code);
    }
}

Если вы немного прочтете внутренности reg-exps, вы поймете, что регулярные выражения весьма эффективны после компиляции базового автоматаи минимизируется (по крайней мере, для простых регулярных выражений, подобных приведенному выше).Независимо от того, как вы реализуете свой алгоритм, он все равно должен будет выполнять примерно ту же работу, что и механизм reg-exp в этом сценарии.

(Если вы посмотрите на метод String.split, выобратите внимание, что внутреннее регулярное выражение скомпилировано в Pattern раз и навсегда.)

3 голосов
/ 11 июня 2010

Вы можете просто использовать анализатор Java для правильного анализа файла.

0 голосов
/ 11 июня 2010

Я пытаюсь прочитать все строки кода из файла .java, кроме комментариев.

(Вы пытаетесь извлечь код или просто сосчитаете строки кода?)

Простой линейный подход, который вы, вероятно, не совсем точный.Например, рассмотрим это:

/*  The next line is wrong:
    res = 1 / 0;
 */

Строковый анализ заключит, что вторая строка - это код ... когда это на самом деле комментарий.регулярное выражение заключается в том, что есть все виды крайних случаев.Например:

System.err.println("/* hello mum ");
System.err.println("*/");

Или

\u002f* This is a comment *\u002f

Я не говорю, что регулярные выражения не могут использоваться .Я просто говорю, что ваш код будет проще и, вероятно, менее хрупким, если вы используете правильный анализатор Java.

0 голосов
/ 11 июня 2010

Вы можете создать собственный синтаксический анализатор, например Javacc , а затем использовать его для анализа файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...