2013-10-26 53 views
0

我甚至不確定我是否正確提問,基本上我想要做的是:1.輸入一個java文件2.對它進行計數並對開括號「{」進行編號,然後對括號進行倒計數並編號「}」因此對於程序來說,匹配括號會更容易,並且您將能夠看到哪些開放的括號對應於哪些關閉括號,並且對於沒有開放括號的末尾的關閉括號,會給它們一個0.例如如果輸入是類似於 blah {blah {blah {blah} blah} blah}}} 它會變成 blah {1 blah {2 blah {3 blah} 3 blah} 2 blah} 1} 0} 0 我的程序所做的大部分工作是檢查控制檯行中的輸入文件,如果沒有,則會提示用戶輸入文件名。現在的方式是,每一個「{」都有一個0,現在我被卡住了。從這一點可以/應該做些什麼?在文件內計數和編號?

import java.util.Scanner; 
import java.io.IOException; 
import java.io.FileReader; 
import java.io.File; 
import java.io.BufferedReader; 


public class BracketCount 
{ 

    public static void main(String args[ ]) throws IOException 
    { 

     File fileName;                 
     if (0 < args.length)                  
     { 
     { 
      try 
      { 
       File inputFile = new File(args[0]);              
       Scanner in=new Scanner(inputFile);          
      } 
      catch(IOException exc) 
      { 
       System.out.println("File not found"); 
      } 
     } 
    } 
    else 
    { 
     try 
     { 
      File inputFile2; 
      Scanner console=new Scanner(System.in); 
      System.out.println("No file in command line, please enter the file: "); 
      String fileName2=console.next(); 
      inputFile2=new File(fileName2); 

     } 
     catch(IOException exc) 
     { 
      System.out.println("File not found"); 
     } 
    } 
} 

} 
+1

首先..一個很好的問題。但是這個程序對我來說毫無意義。 while循環什麼都不做。我認爲您需要首先更正語法 –

+2

這些括號....... – Tdorno

+2

您提供的代碼中存在多個錯誤。你在使用IDE嗎? – Tdorno

回答

0

我會做這樣的事情

// boolean to detect fist closing bracket 
boolean firstClose = false; 

int count = 0; 
StringBuilder sb = new StringBuilder(); 
while(input.hasNextLine()) { 
    String line = input.nextLine();   // get one line 
    String newLine = "";      // start newLine with 0 chars 
    for (int i = 0; i < line.length(); i++) { // loop through chars in line 
     char ch = line.charAt(i); 
     if (ch == '{') {      // if current char = '{' 
      newLine += ch;     // add '{' to newLine 
      count++;       // increase count 
      newLine += count; 

      firstClose = true; 

     } else if (ch == '}') {  
      if (firstClose) { 
       newLine += ch; 
       newLine += count; 
      } else { 
       newLine += ch;     
       count--;       
       newLine += count; 
       firstClose = false; 
      }    
     } else { 
      newLine += ch;     // else add char to newLine 
     } 
    } 
    sb.append(newLine);      // append newline to StringBuilder 
    sb.append("\n");       // append a next line char 
} 

PrintWriter writer = new PrintWriter(file); 
writer.print(sb.toString());     // print the entire StringBuiler to file. 
               // This this completely overwrite the 
               // original file 
+0

我可以使用System.out.println(sb)打印到控制檯而不是覆蓋正在讀取的文件嗎? – user2921899

+0

是的,我不明白爲什麼不。 –

+0

非常接近!我已經嘗試了一點,並且無法弄清楚,但是這並沒有正確對應數字,它應該是{1 {2 {3,} 3} 2} 1,但它是{1 {2 { 3,} 2} 1} 0 – user2921899

0

那豈不是更好地掃描該文件,一次一個字符,每當你看到一個「{」,插入你的櫃檯&然後增加它,但每當你看到一個「}」,減少你的計數器,然後插入它?否則,標籤將不匹配。 (即使這樣做,你會得到與大括號內的字符串和/或評論的麻煩。)

1

你這樣做每次:

StringBuilder(text); 

變量count設置爲0,移動這行代碼,並在類級別聲明count

int count = 0; 
相關問題