【发布时间】:2016-03-20 02:43:58
【问题描述】:
我有一个带有 2 个堆栈(left 和 right)的文本编辑器缓冲区硬件分配。在大多数情况下,一切都按预期的方式工作。但我遇到的麻烦是它返回了太多的空白。我专门尝试填写toString() 方法以返回文本。
例如返回文本打印:
T h e r e i s g r a n d e u r i n t h i s v i e w o f l i f e ,
字母之间有一个空格,每个单词之间有两个空格。如何删除字母之间的空格,同时只删除单词之间的 1 个空格,以便我的字符串返回:
There is grandeur in this view of life,
public class Buffer {
private Stack<Character> left; // chars left of cursor
private Stack<Character> right; // chars right of cursor
// Create an empty buffer.
public Buffer() {
left = new Stack<Character>();
right = new Stack<Character>();
}
// Insert c at the cursor position.
public void insert(char c) {
left.push(c);
}
// Delete and return the character at the cursor.
public char delete() {
if (!right.isEmpty()){
return right.pop();
}else return 0;
}
// Move the cursor k positions to the left.
public void left(int k) {
while (!left.isEmpty() && --k >= 0){
right.push(left.pop());
}
}
// Move the cursor k positions to the right.
public void right(int k) {
while (!right.isEmpty() && --k >=0){
left.push(right.pop());
}
}
// Return the number of characters in the buffer.
public int size() {
return left.size()+right.size();
}
// Return a string representation of the buffer with a "|" character (not
// part of the buffer) at the cursor position.
public String toString() {
String a = (left+"|"+right);
return a;
}
// Test client (DO NOT EDIT).
public static void main(String[] args) {
Buffer buf = new Buffer();
String s = "There is grandeur in this view of life, with its "
+ "several powers, having been originally breathed into a few "
+ "forms or into one; and that, whilst this planet has gone "
+ "cycling on according to the fixed law of gravity, from so "
+ "simple a beginning endless forms most beautiful and most "
+ "wonderful have been, and are being, evolved. ~ "
+ "Charles Darwin, The Origin of Species";
for (int i = 0; i < s.length(); i++) {
buf.insert(s.charAt(i));
}
buf.left(buf.size());
buf.right(97);
s = "by the Creator ";
for (int i = 0; i < s.length(); i++) {
buf.insert(s.charAt(i));
}
buf.right(228);
buf.delete();
buf.insert('-');
buf.insert('-');
buf.left(342);
StdOut.println(buf);
}
}
【问题讨论】:
-
您应该尽最大努力按照本网站的规则解决您的问题。另请查看How do I ask and answer Homework questions。无论问题是针对家庭作业还是家庭作业(自学),此信息均有效。
-
toString() 方法的代码是什么?
-
提示:识别是两个空格还是一个空格。 java.lang.String.toCharArray() (注意:有更好的方法,例如正则表达式!但对于初学者来说可能太多了)。然后用 1 个空格替换 2 个空格,用空字符串替换 1 个空格 ""
-
@PinTacular 好吧,在这种情况下,要么 github 上的代码不是最新版本,要么
StdOut-class 中有一些奇怪的错误。顺便说一句,那个班级不见了……