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