2013-04-21 114 views
-2

我想计算一个程序内的代码行数,并且我已经编写了代码来计算;的数量。它工作正常,但在某些情况下不存在;(如ifwhile语句)。在这种情况下,我将一些关键字存储在一个字符串数组中,我想使用readLine()来搜索该关键字。如果它工作正常,那么我会增加1,但它不起作用。我尝试了很多,但它根本不工作,它显示了异常。由于Demo.java您可以使用自己的代码。如何计算程序中的代码行数?

Classdetect1.java

import java.io.*; 
public class Classdetect1 
{ 
    public static void main(String[] args) throws IOException 
    { 
     int i=0,j=0,k=0,p; 
     String str1[]={"if","else","else if","while","for","goto","do"}; 

     // Open the file 
     FileInputStream fstream = new FileInputStream("Demo.java"); 



     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

     String strLine; 

     if (in == null){ 
      System.out.println("File is blank"); 
      System.exit(0); 
     } 

     while (i != -1) 
     { 
      i = in.read(); 
      if(i==';' || i=='{') 
      { 
       j=j+1; 
      } 

      if(i=='\'') 
      { 
       while(in.read()!='\'') 
        continue; 
      } 

      if(i=='\"') 
      { 
       while(in.read()!='\"') 
        continue; 
      } 

      if(i=='(') 
      { 
       while(in.read()!=')') 
        continue; 
      } 


      while ((strLine = br.readLine()) != null) 
      { 
       for(p=0;p<7;p++) 
       { 
        if(str[p].equals(strLine)) 
        { 
         k=k+1; 
        } 
       } 
      } 
      System.out.println("Line of =" + k); 
     } 
     System.out.println("Total Line of code=" + j); 
    } 
} 
+2

什么是_The EXCEPTION_,以及在哪里呢_it_发生的呢? – Virtlink 2013-04-21 12:17:58

+0

考虑写一个解析器,读一下Antlr – 2013-04-21 12:21:01

+1

'str [p] .equals(strLine)',你在哪里定义了名为'str'的​​数组? – NINCOMPOOP 2013-04-21 12:22:41

回答

0

在Java所有语句结束或者与;或与内{}的块。一些例子:

System.out.println("One statement"); 

while (str.equals("One block of statements + one statement")) 
{ 
    System.out.println("One statement"); 
} 

此外,;并不需要在同一行的所有:

System.out.println(
    "One statement" 
); 

所以,你可以简单地计算所有;(语句的结束)和所有{(声明的结尾,块的开始),这将是相当准确的。

if (true) 
{        // One statement ending with '{' 
    doSomething();    // One statement ending with ';' 
    while (false) 
    {       // One statement ending with '{' 
     doSomethingElse();  // One statement ending with ';' 
    } 
} 
// 4 statements in total. 

当然,也有(总是)一些例外:

if (true) doSomething(); // One statement, or two? 

do { doSomething(); } while (true); // Three statements, or two? 
0

试试这个:

BufferedReader br = new BufferedReader(new FileReader(new File("C:/lines.txt"))); 
String s = ""; 
String text = ""; 

//save all the file in a string 
while ((s = br.readLine()) != null) { 
    text += s + "\n"; 
} 

//remove empty lines with a regex 
String withoutEmptyLines = text.replaceAll("(?m)^[ \t]*\r?\n", ""); 

//lines of code = text with newline characters length - text without newline characters length 
int linesOfCode = withoutEmptyLines.length() - withoutEmptyLines.replaceAll("\n", "").length(); 
System.out.println("Lines: "+linesOfCode); 

C:/lines.txt文件:

01. a 
02. 
03. b 
04. c 
05. c 
06. d 
07. as 
08. d 
09. asd 
10. asd 
11. a 
12. 
13. 
14. 
15. asd 
16. 
17. asd 
18. 
19. 
20. 
21. asdasd 
22. 
23. 
24. 

有了这个文件,输出是:

Lines: 13 

希望这有助于

相关问题