Java StringBuilder.delete如何解释参数?

Java StringBuilder.delete如何解释参数?,java,stringbuilder,Java,Stringbuilder,我有一种用于telnet文本通信的缓冲方法。除了标准字母外,这种交流还有一些有趣的控制字符。其中之一是带有8整数值的字符删除 我想实现这个值-它将真正帮助我使用telnet中的程序,因为如果我按错一个字符,目前我需要重新键入整个命令 所以我做了一个检查函数,每次接收字符时都会调用它: public boolean newChar(char current, StringBuilder all) { //Debug info switch (current) { c

我有一种用于
telnet
文本通信的缓冲方法。除了标准字母外,这种交流还有一些有趣的控制字符。其中之一是带有
8
整数值的字符删除

我想实现这个值-它将真正帮助我使用telnet中的程序,因为如果我按错一个字符,目前我需要重新键入整个命令

所以我做了一个检查函数,每次接收字符时都会调用它:

public boolean newChar(char current, StringBuilder all) {
    //Debug info
    switch (current) {
        case 13 : Log.debug("Character '\\r' [13]");break;   
        case 10 : Log.debug("Character '\\n' [10]");break;  
        case 8 : Log.debug("Character DELETE [8]");break;  
        default:Log.debug("Character '"+current+"' ["+(int)current+"]"); 
    }

    //Delete character
    if(current==8) {
          int length = all.length();
          if(length>1) {
            ///THIS DOES NOT WORK
            //all.delete(length-2, length-1);
            ///WHILE FOLLOWING WORKS WELL
            all.deleteCharAt(length-1);
            all.deleteCharAt(length-2);
            Log.debug("Deleted one character from buffer. Current buffer:\n    "+all);
          }
          else
            all.deleteCharAt(length-1);
    }
    //Ignore newlines
    else if(current=='\r'||current=='\n') {
          all.deleteCharAt(all.length()-1);
    }
    //Return true if current character is newline
    //True return value means that the buffer now contains whole message...
    return current=='\n';
}
如果收到删除字符,则应删除该字符及其前面的字符。我认为这个计划应该适合这个目的

int length = builder.length();
builder.delete(length-2, length-1);
但是,这将删除2个字符和删除字符-3个字符:

Character '6' [54]
Character '6' [54]
Character '6' [54]
Character DELETE [8]
Deleted one character from buffer. Current buffer:
    6
我还尝试了
builder.delete(length-1,length),尽管它毫无意义。我没有删除我能看到的任何东西。(我猜它删除了删除字符,然后默默地失败了)。
有趣的是,这对我来说很好:

builder.deleteCharAt(length-1);
builder.deleteCharAt(length-2);

有人能解释为什么会发生这种情况吗?

开始是包含的,结束是独占的。你如何管理这些以删除3个字符?哦,但这令人难以置信的困惑。。。我只是猜测有3个字符被删除了。当然,
DELETE
字符在输出中是不可见的。我认为,在中,not DELETE(BS代表Backspace)默认情况下,telnet也使用LINEMODE-因此所有Backspace都在客户端处理,为什么您必须在服务器上处理它们?我的telnet(Windows telnet)默认情况下不使用LINEMODE。谢谢你告诉我这个角色的名字——我刚用它的时候把它命名为DELETE。我从未读过任何关于telnet实际工作原理的文档。