数据结构-栈的使用之行编辑程序

一个简单的行编辑器程序的功能是:接收用户从终端输入的程序或数据,对用户输入的一行数据做处理,#表示退格键,删除#前的一个字符。@表示@符号之前的数据均无效。

比如用户输入了 gosd##od实际有效字符是good,当用户输入了pgm@progre#am实际有效的是program

思路分析

将一行的字符依次读入栈中,遇到#取出栈顶数据,若遇到@则清空栈。

实现


import java.util.Arrays;
import java.util.Stack;
import java.util.stream.Collectors;

/**
 * 行编辑器
 *
 * @author jaune
 */
public class LineEditor {
     

    public String handle(String line) {
     
        char[] chars = line.toCharArray();
        Stack<Character> stack = new Stack<>();
        for (char ch : chars) {
     
            if (stack.isEmpty()) {
     
                if (ch != '#' && ch != '@') {
     
                    stack.push(ch);
                }
            } else {
     
                if (ch == '#') {
     
                    stack.pop();
                } else if (ch == '@') {
     
                    stack.clear();
                } else {
     
                    stack.push(ch);
                }
            }
        }
        Character[] res = new Character[stack.size()];
        stack.toArray(res);
        stack.clear();
        return Arrays.stream(res).map(String::valueOf).collect(Collectors.joining());
    }
}

你可能感兴趣的:(数据结构)