算法 1.3.44 文本编辑器的缓冲区

来源:互联网 发布:网络投资赚钱 编辑:程序博客网 时间:2024/04/29 16:42

package Cap1;import java.util.Iterator;import edu.princeton.cs.introcs.StdOut;public class Buffer implements Iterable{Stack<Character> front = new Stack<Character>(); // 光标前面的Stack<Character> after = new Stack<Character>(); // 光标后面的public int size(){ return front.size() + after.size(); }public void insert(char c){front.push(c);}public char delete(){char ans = front.pop();return ans;}public void left(int k){if(k>=front.size()) return;for(int i=0;i<k;i++)after.push(front.pop());}public void right(int k){if(k>after.size()) return;for(int i=0;i<k;i++)front.push(after.pop());}@Overridepublic Iterator iterator() {// TODO Auto-generated method stubreturn new BufferIterator();}private class BufferIterator implements Iterator{Iterator<Character> it;public BufferIterator(){Stack<Character> afterTemp = Stack.copy(after);for(Character c:front)afterTemp.push(c);it = afterTemp.iterator();}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn it.hasNext();}@Overridepublic Character next() {// TODO Auto-generated method stubreturn it.next();}@Overridepublic void remove() {// TODO Auto-generated method stub}}public static void main(String[] args) {// TODO Auto-generated method stubBuffer b = new Buffer();String s = "Hellow word!";for(int i=0;i<s.length();i++){b.insert(s.charAt(i));}for(Object c:b)StdOut.print(c);StdOut.println();b.left(6);b.delete();for(Object c:b)StdOut.print(c);StdOut.println();b.right(4);b.insert('l');for(Object c:b)StdOut.print(c);StdOut.println();}}



Hellow word!Hello word!Hello world!