对文件内部进行计数和编号?

时间:2013-10-26 01:13:32

标签: java

我甚至不确定我是否正确地询问了,基本上我想要做的是: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");   
        }  
    }
}

}

3 个答案:

答案 0 :(得分:1)

每次执行此操作:

StringBuilder(text);

变量count设置为0.移动此行代码并在类级别声明count

int count = 0;

答案 1 :(得分:0)

扫描文件,一次扫描一个字符并不是更好,每当看到“{”时,请插入计数器&amp;然后增加它,但每当你看到'}',减少你的计数器,然后插入它?否则,标签将不匹配。 (即使这样做,你也会遇到字符串和/或注释中的花括号问题。)

答案 2 :(得分: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