【问题标题】:Use a stack to check .txt file for ('s, {'s, ['s, etc - Java使用堆栈检查 .txt 文件中的 ('s、{'s、['s 等 - Java
【发布时间】:2011-12-28 08:25:20
【问题描述】:

我正在尝试在 java 中编写一个方法来搜索我为特定字符导入的文本文件。该文件实际上是我设计并转换为.txt文件的java程序。

当找到一个左大括号/方括号时,我应该将它添加(推送)到堆栈中,然后当找到相应的右大括号/方括号时,我应该从堆栈中删除(弹出)它。

目的是看我的)}]>的数量是否与({[>相对应。如果它们都匹配,则该方法应返回 true,否则应返回 false。

有人知道我怎么写吗?

【问题讨论】:

  • 好吧,所有的算法都在那里......
  • 高级...逐行读取文件。对于每行中的每个字符,查找左/右括号/括号/花括号并执行您在问题中描述的堆栈内容。在文件的末尾,你的堆栈应该是空的
  • 在实际实现代码时遇到了麻烦。为另一节课学习了一整天,所以我现在有点慢...
  • Bryan,作业查询应该这样标记。
  • 麻烦的是哪一部分...读取文件、解析文件、读取一行中的字符、使用堆栈?

标签: java file stack


【解决方案1】:

这是平衡输入文本文件中括号的示例实现

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

【讨论】:

  • 请不要为标记为“作业”的问题发布完整的解决方案 - 它通常不会真正帮助 OP 学习任何东西。
  • @Mac 感谢您的建议,我会记住的。 OP 在他的问题本身中得到了整个算法,这就是我发布代码的原因。
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2017-12-27
  • 2014-02-14
相关资源
最近更新 更多