Используйте стек для проверки .txt файла для ('s, {' s, ['s, и т. Д. - Java - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь написать метод в Java для поиска текстового файла, который я импортировал для определенных символов.Файл на самом деле является Java-программой, которую я разработал и преобразовал в .txt файл.

Когда найдена открывающая скобка / скобка, я должен добавить (поместить) ее в стек, а затем, когдасоответствующая закрывающая скобка / скобка найдена. Я должен удалить ее из стека> для соответствия (, {, [ и >.Если они все совпадают, метод должен вернуть true, если нет, он должен вернуть false.

Кто-нибудь знает, как я могу написать это?

1 Ответ

2 голосов
/ 14 ноября 2011

Это пример реализации для балансировки скобок во входном текстовом файле

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Stack;

public class BalanceBrackets {
    private Stack<Character> symbolStack;

    public void balance(String inputText) {
        symbolStack = new Stack<Character>();
        for (int index = 0; index < inputText.length(); index++) {
            char currentSymbol = inputText.charAt(index);
            switch (currentSymbol) {
            case '(':
            case '[':
            case '{': 
                symbolStack.push(currentSymbol);
                break;

            case ')':
            case ']':
            case '}':
                if (!symbolStack.isEmpty()) {
                    char symbolStackTop = symbolStack.pop();
                    if ((currentSymbol == '}' && symbolStackTop != '{')
                            || (currentSymbol == ')' && symbolStackTop != '(')
                            || (currentSymbol == ']' && symbolStackTop != '[')) {
                        System.out.println("Unmatched closing bracket while parsing " + currentSymbol + " at " + index+1);
                        return;
                    }
                } else {
                    System.out.println("Extra closing bracket while parsing " + currentSymbol + " at character " + index+1);
                    return;
                }
                break;
            default:
                break;
            }
        }
        if (!symbolStack.isEmpty())
            System.out.println("Insufficient closing brackets after parsing the entire input text");
        else 
            System.out.println("Brackets are balanced");
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("D://input.txt"));
        String input = null;
        StringBuilder sb = new StringBuilder();
        while ((input = in.readLine()) != null) {
            sb.append(input);
        }
        new BalanceBrackets().balance(sb.toString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...