我的代码将首先读取文件并获取所有括号并放在列表中,然后它将分析是否缺少特定的括号,例如:read:(,missing:)。并在特定的行上添加(我找不到要添加的行,也不知道如何添加确切的括号)。
第二,它将找到左/右括号的数量,例如:它具有4'('和3')'并显示行号。 (我的代码执行此操作,但仅在一行中进行,例如:仅显示缺少的最后一行)。
public class Exemplo {
private static final List<Character> abridores = new ArrayList<Character>(Arrays.asList('(','[','{'));
private static final List<Character> fechadores = new ArrayList<Character>(Arrays.asList(')',']','}'));
public static int verificarparen(String s) {
Stack<Character> stack = new Stack<Character>();
int linha = 1;
boolean string = false,character = false;
for (char c : s.toCharArray()) {
if (c == '\n') {
linha++;
continue;
}
// NÃO SUPORTA STRING COM ASPAS DUPLAS DENTRO (\") E CHAR COM ASPAS DENTRO (\')
if (c == '"' && character == false) {
string = !string;
continue;
} else if (c == '\'' && string == false) {
character = !character;
continue;
}
if (string || character) {
continue;
}
if (abridores.contains(c)) {
stack.push(c);
} else if (fechadores.contains(c)) {
if (stack.isEmpty()) {
return linha;
}
Character abridorCorrespondente = abridores.get(fechadores.indexOf(c));
if (!abridorCorrespondente.equals(stack.pop())) {
return linha;
}
}
}
if (stack.isEmpty() && !string && !character) {
return 0;
} else {
return linha;
}
}
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.printf("Informe o nome de arquivo texto:\n");
String nome = ler.nextLine();
System.out.printf("\nConteúdo do arquivo texto:\n");
try {
FileReader arq = new FileReader(nome);
FileWriter arqq = new FileWriter(nome,true);
BufferedReader lerarq = new BufferedReader(arq);
BufferedWriter buf = new BufferedWriter(arqq);
String codigo = lerarq.lines().collect(Collectors.joining("\n"));
int ret = verificarparen(codigo);
if (ret == 0) {
System.out.println("arquivo Balanceado");
} else {
System.out.printf("arquivo desbalanceado na linha: %d\n",ret);
// buf.a
// System.out.printf("File fixed %\n");
buf.close();
}
arq.close();
} catch (IOException e) {
System.err.printf("Erro na abertura do arquivo: %s.\n",e.getMessage());
}
ler.close();
}
}