Я пишу код для подсчета строк кода, за исключением комментариев и пустых строк, но я застрял на том, что использовать вместо метода readLine() с текстовой переменной, поскольку он используется только с классом BufferedReader. Я не хочу использовать BufferedReader. Я хочу, чтобы он оставался строкой. Что я могу сделать, чтобы решить эту проблему?
public static int count(String text) {
int count = 0;
boolean commentBegan = false;
String line = null;
while ((line = text.readLine()) != null) {
line = line.trim();
if ("".equals(line) || line.startsWith("//")) {
continue;
}
if (commentBegan) {
if (commentEnded(line)) {
line = line.substring(line.indexOf("*/") + 2).trim();
commentBegan = false;
if ("".equals(line) || line.startsWith("//")) {
continue;
}
} else
continue;
}
if (isSourceCodeLine(line)) {
count++;
}
if (commentBegan(line)) {
commentBegan = true;
}
}
return count;
}
private static boolean commentBegan(String line) {}
private static boolean commentEnded(String line) {}
private static boolean isSourceCodeLine(String line) {}
Text.readLine(), который я написал выше, не коррелирует с тем, что я должен сделать, поскольку он дает ошибку, я написал полный код для методов commentBegan(), commentEnd() и isSourceCodeLine(). Все, что мне нужно, это решить проблему метода readLine().
Да. Это именно то, чего я хочу добиться.
Мое предложение состоит в том, чтобы идентифицировать строки перед циклом и изменить его механизм:
public static int count(String text) {
int count = 0;
boolean commentBegan = false;
String[] lines = text.split(System.getProperty("line.separator"));
for (String line:lines) {
//your logic here
}
}
Разделение text
на line.separator
вернет все строки внутри него, хранящиеся в array
. Переберите его и используйте свою собственную логику.
Подсчитайте количество новых строк, это должно дать вам ответ, верно?