Как считать комментарии (одиночные и множественные) строки в Java? - PullRequest
3 голосов
/ 12 марта 2011

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

Ответы [ 6 ]

3 голосов
/ 12 марта 2011

Если вы просто хотите получить сводную информацию о количестве строк в отношении комментариев и кода, посмотрите CLOC .Направьте его на исходный каталог, то есть:

cloc src

..., и он покажет сводку для вас.

CLOC также имеет дело с угловыми случаями, которые затрудняют выполнениеВы сами решаете эту проблему - многострочные комментарии, комментарии в виде строк внутри строк и так далее.Следующее:

package test;

public class Main {

/**
 * A javadoc comment.
 * @param args
 */
public static void main(String[] args) {
    System.out.println("/* This isn't a comment */");
    /* This is a comment */
    //Comment
    System.out.println("//Not comment");
}
//Comment
}

CLOC дает 2 пустые строки, 7 строк комментариев и 7 строк кода.

Да, вы можете написать что-нибудь самостоятельно на Java, но если это не конкретный вопрос для домашней работы(в этом случае он должен быть помечен как таковой) зачем изобретать велосипед?Вам нужно будет разобраться с множеством угловых случаев, сделать много тестов, чтобы убедиться, что это работает, сравнить с существующими инструментами и т. Д., И в действительности нет никакого смысла делать это, когда у вас есть что-то, что уже хорошо выполняет свою работу.

2 голосов
/ 06 ноября 2012

Вот ссылка на задание, которое я сделал для того же вопроса. Надеюсь, это поможет.

Примечание: не является полным, потому что он не учитывает регистр строк в java (в двойных кавычках), которые содержат двойные кавычки, перед которыми стоят escape-символы (например, "/ \" / ") в виде строки кода, а скорее это считается комментарием. Это все еще необходимо решить.

http://bit.ly/PDasu9

Вот объяснение: -

Note :- This program is not optimized for performance, performance is not an attribute i care about here. I chose not to use Pattern.compile() among many other decisions.

I count the empty lines, comment lines and lines of code separately.

if there is any sentence which has a some tabs or just spaces, they are counted as
empty lines. They match with the regular expression \s*
\s - any whitespace character (\n\t\b)
 * - this means there can be any number of whitespace characters


comment lines are the ones that match any of the following conditions :-
1) have a // outside of a string
2) have a /* some comment */
3) have a /* but the '*/' is not found on the same line

The regular expression for the above can be found inside the code!

Lines of code are the ones that end in ')' , '}' , '{' or ';' (one problem with this approach is that it does not count lines that have code followed by comment as a line of code)

The summary of these three types of lines are provided by this program.
0 голосов
/ 17 ноября 2015

Для одного из моих классных заданий я написал простой код Java, который выполняет эту задачу.https://github.com/chetanpawar0989/CommentAnalysis

Я создал этот файл ранее, но недавно добавил в github.Эта программа работает с одним файлом и построчно.Во время выполнения требуется один импульсный параметр filename.java

Например, для запуска этой программы: java CommentAnalysis filename.java

Подсчитывает как одну строку (//), так и несколькострочные комментарии (/ * ... * /).

Я пытался охватить различные сценарии комментариев, упомянутые в этом файле .

Я также написал свои предположенияо моей реализации в readme, но их не должно быть очень сложно изменить в соответствии с индивидуальными требованиями.Пожалуйста, проверьте это и дайте мне знать, если я пропускаю какой-либо сценарий комментариев здесь.

0 голосов
/ 02 октября 2014
//Below is the working code 

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CountComment {

    public static void main(String[] args) {
        String line="";
        int count=0;
        try {
            BufferedReader br=new BufferedReader(new FileReader("./src/numbers/comment.txt"));
                while((line=br.readLine())!=null)
                {
                    if(line.startsWith("//"))
                        count++;
                    if(line.startsWith("/*"))
                    {
                        count++;
                        while(!(line=br.readLine()).endsWith("'*\'"))
                        {
                        count++;
                        break;
                        }
                    }

                }
                br.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
             catch (IOException e) {
                e.printStackTrace();
            }

        System.out.println("count="+count);
        } 


    }
0 голосов
/ 12 марта 2011

В Java У вас есть два типа комментариев:

// - Комментарий к строке

/ * * / - Заблокировать комментарий.

Исходя из этого, вы можете сделать простые предположения:

  • если в строке существует "//", то в этой строке есть один комментарий.

  • если в строке существует "/ *", был открыт блок комментария.

  • если блок комментариев открыт (найден), искать закрывающий тег "* /".

Итак, ваша задача - проверить каждую строку в файле на наличие этих предположений.

0 голосов
/ 12 марта 2011

Посмотрите на StreamTokenizer

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