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");   
        }  
    }
}

}
4

3 回答 3

1

每次你这样做:

StringBuilder(text);

变量count设置为 0。移动这行代码并count在类级别声明:

int count = 0;
于 2013-10-26T01:35:18.227 回答
0

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

于 2013-10-26T01:34:43.113 回答
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
于 2013-10-26T01:52:34.710 回答