2016-04-01 99 views
1

Bir dosyadan satır, satır satır okur ve "int" sonra ne yazdıran bir program yazıyorum. Örneğinİşlevler hariç, int yazın işlevleri yazdırma

:

int x; 
int y; 

Dışarı yazdırır: Burada

x 
y 

Yazdığım kod şimdiye kadar Ancak, ben fonksiyonlarını hariç tutmak istediğiniz

BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt")); 

String line = null; 
while((line = br.readLine()) != null) 
{ 
    StringTokenizer token = new StringTokenizer(line); 

    while(token.hasMoreTokens()) 
    { 
     String s = null; 
     s = token.nextToken(); 

     if(s.equals("int")) 
     { 
      System.out.println(token.nextToken()); 
     } 
    } 
} 

Bu örnekte "MyFunction" gibi yazdırılacak int türünü

x 
z 
MyFunction(int 
y) 
x, 
y 

Giriş dosyası:

int x = 137; 
int z = 42; 
int MyFunction(int x, int y) { 
    printf("%d,%d,%d\n", x, y, z); 
    { 
     int x, z; 
     z = y; 
     x = z; 
     { 
     int y = x; 
     { 
      printf("%d,%d,%d\n", x, y, z); 
     } 
     printf("%d,%d,%d\n", x, y, z); 
     } 
     printf("%d,%d,%d\n", x, y, z); 
    } 
} 

Ben java için oldukça yeni, bu yüzden lütfen sabırlı olun.

+2

Tam bir giriş dosyası vermek, – jhamon

cevap

0

Bunu deneyin. Sadece yukarıdaki gibi benzer girdiler için çalışacaktır.

while((line = br.readLine()) != null) 
{ 
    StringTokenizer token = new StringTokenizer(line); 

    while(token.hasMoreTokens()) 
    { 
    String s = null; 
    String r = null; 
    s = token.nextToken(); 

    if(token.hasMoreTokens()){ //if s was not last token get next one 
     r = token.nextToken(); 
    } 
    if(s.equals("int") && r != null && r.length()<3) 
    { 
     System.out.println(r.substring(0, 1)); // just to print x instead of x, 
    } 
} 

}

+0

yardımcı olabilir, ancak bu yalnızca bir ad uzunluğunda bir değişken için geçerlidir. Eğer int (int x, int y) 'gibi bir metodunuz varsa (ilk parametreden önceki boşluğa dikkat edin) başarısız olur. Bir iyileştirme, 'r' uzunluğunu kontrol etmek değil, bunun yerine bir '(' (regex kullanarak) olup olmadığını kontrol et ve son karakteri sadece bir virgül – jhamon

+0

ise kaldır. Kodun kesinlikle benim için bir gelişmedir. Ayrıca x ve y'yi ** MyFunction ** parametrelerinde yazdırmak isterim Ve satır 6'da "int x, z;" Ayrıca z olarak da yazdırmak istiyorum çünkü aynı zamanda int olarak bildirildi. –

0

ayrıca bu deneyebilirsiniz.

while((line = br.readLine()) != null){ 
     String cleaned = line.trim(); //remove leading and trailing white space 
     String [] parts = cleaned.split(" |\\(");// split using white space or opening brace    
     if (line.matches("(\\s*)int(\\s*)(\\w+)(,\\s*\\w+)*(;)")){ // check for multiple variable declariation e.g. int a,b,c; 
      for (int k = 1; k <parts.length; k++){ 
       System.out.println(parts[k]);        
      } 
     } 
     else { 
      for (int i = 0; i <parts.length-1; i=i+2){ 
       if((parts[i].equals("int")&&parts[i+1].length()<3)){ //requires variable name length to be one 
        System.out.println(parts[i+1].substring(0, 1)); 
       }        
      }      
     }     
    }