Java 计算几个方法的行数,但返回单独的值,而不是所有方法的总和
我要把我的问题说出来,因为我很难用正确的方式给问题贴上标签 我给我的方法贴上这样的标签:Java 计算几个方法的行数,但返回单独的值,而不是所有方法的总和,java,counter,bufferedreader,loc,Java,Counter,Bufferedreader,Loc,我要把我的问题说出来,因为我很难用正确的方式给问题贴上标签 我给我的方法贴上这样的标签: /*Start*/ public void contadorDeLineas(File file)throws IOException{ BufferedReader br = new BufferedReader(new FileReader(file)); String line; /*Finish*/ 我有几个这样标记的方法,但我想分别计算它们,但我编写的代码计算方法中的行数,
/*Start*/
public void contadorDeLineas(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
/*Finish*/
我有几个这样标记的方法,但我想分别计算它们,但我编写的代码计算方法中的行数,从public开始,到“Finish”结束。但就目前而言,我编写的代码对方法中的所有行进行计数,并返回所有行的总和。我要做的是读取返回该值的第一个代码块,然后继续搜索下一个代码块。
这是我写的代码
public void LinesMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int lines_inside = 0;
while((line = br.readLine())!=null){
if(line.startsWith("/*St")){
do{
line = br.readLine();
line = line.trim();
System.out.println(line);
if(!(line.equals("") || line.startsWith("/*"))){
lines_inside++;
}
}while(!line.startsWith("/*Fi"));
}
}
br.close();
System.out.println("Found: " + lines_inside);
}
这是我的代码在控制台中显示的示例
/*Start*/
public void LineMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
/*Finish*/
/*Start*/
public static void main(String[] args)throws IOException{
program2 test = new program2();
File root = new File(args[0]);
test.LOC(root);
System.out.println("Found: " + test.lines);
System.out.println("Other type of lines: " + test.toDo);
}
}
/*Finish*/
Block comments lines: 11
相反,我在寻找一个结果,比如第一次打印显示数字3,然后是数字8。
任何指导都将不胜感激 试着把
行放在++里面代码>在如下代码中:
while((line = br.readLine())!=null){
lines_inside++;
...
这将为您提供文件中元素的大致数量。尝试将行放入++代码>在如下代码中:
while((line = br.readLine())!=null){
lines_inside++;
...
这将为您提供文件中元素的大致数量。试试这个
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
boolean inside = false;
int count = 0;
String line;
while ((line = br.readLine()) != null) {
if (line.contains("/*Start*/")) {
inside = true;
count = 0;
} else if (line.contains("/*Finish*/")) {
System.out.println("Found: " + count);
inside = false;
} else if (inside) {
++count;
}
}
if (inside && count > 0)
System.out.println("Found: " + count);
}
试试这个
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
boolean inside = false;
int count = 0;
String line;
while ((line = br.readLine()) != null) {
if (line.contains("/*Start*/")) {
inside = true;
count = 0;
} else if (line.contains("/*Finish*/")) {
System.out.println("Found: " + count);
inside = false;
} else if (inside) {
++count;
}
}
if (inside && count > 0)
System.out.println("Found: " + count);
}
如果你有几种方法,当你只对行数感兴趣时,打印出所有的行可能太多了。您可以将方法的名称和行数放在地图中并打印出来
public static void LinesMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int lines_inside = 0;
Map<String, Integer> map = new HashMap<>();
while((line = br.readLine())!=null){
lines_inside = 0;
if(line.startsWith("/*St")){
String method = "";
do{
line = br.readLine();
if(line.contains("public")){
method = line.substring(0, ine.indexOf('('));
}
line = line.trim();
if(!(line.equals("") || line.startsWith("/*"))){
lines_inside++;
}
}while(!line.startsWith("/*Fi"));
map.put(method, lines_inside);
}
}
br.close();
for(String s :map.keySet()){
System.out.println(s +" : "+ map.get(s));
}
}
publicstaticvoidlinesmethods(文件)引发IOException{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
弦线;
int line_inside=0;
Map Map=newhashmap();
而((line=br.readLine())!=null){
线_内=0;
if(第行开始时带(“/*St”)){
字符串方法=”;
做{
line=br.readLine();
如果(第行包含(“公共”)){
方法=行.子字符串(0,行.索引of(')(');
}
line=line.trim();
if(!(直线等于(“”| |直线起始(“/*”)){
线_在++内;
}
}而(!line.startsWith(“/*Fi”);
地图。放置(方法,线在里面);
}
}
br.close();
对于(字符串s:map.keySet()){
System.out.println(s+“:”+map.get(s));
}
}
如果你有几种方法,当你只对行数感兴趣时,打印出来的所有行数可能太多。你可以把方法的名称和行数放在地图上,然后打印出来
public static void LinesMethods(File file)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int lines_inside = 0;
Map<String, Integer> map = new HashMap<>();
while((line = br.readLine())!=null){
lines_inside = 0;
if(line.startsWith("/*St")){
String method = "";
do{
line = br.readLine();
if(line.contains("public")){
method = line.substring(0, ine.indexOf('('));
}
line = line.trim();
if(!(line.equals("") || line.startsWith("/*"))){
lines_inside++;
}
}while(!line.startsWith("/*Fi"));
map.put(method, lines_inside);
}
}
br.close();
for(String s :map.keySet()){
System.out.println(s +" : "+ map.get(s));
}
}
publicstaticvoidlinesmethods(文件)引发IOException{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
弦线;
int line_inside=0;
Map Map=newhashmap();
而((line=br.readLine())!=null){
线_内=0;
if(第行开始时带(“/*St”)){
字符串方法=”;
做{
line=br.readLine();
如果(第行包含(“公共”)){
方法=行.子字符串(0,行.索引of(')(');
}
line=line.trim();
if(!(直线等于(“”| |直线起始(“/*”)){
线_在++内;
}
}而(!line.startsWith(“/*Fi”);
地图。放置(方法,线在里面);
}
}
br.close();
对于(字符串s:map.keySet()){
System.out.println(s+“:”+map.get(s));
}
}
有一个行号int
在循环内无条件递增。有一个行号int
在循环内无条件递增。