【问题标题】:How to process the backspace terminal control character in Java? [closed]如何在 Java 中处理退格终端控制字符? [关闭]
【发布时间】:2013-04-29 05:06:31
【问题描述】:

我正在用 Java 编写一个基本的 telnet 服务器,我想处理由 '\b' 表示的退格终端控制字符。 退格字符删除/移除字符串中的前一个字符。

我目前正在使用下面的示例方法来成功实现这一点,但有人知道更清洁/更有效的方法吗?

非常感谢您提供的任何帮助。

/*
Example input: 
"This is a dog\b\b\bcat"
"\b\b\bThis is x\b a cat"
"\b\b\bThis\b\b\bThis is a dog\b\b\bcat"
*/

    private String processBackspace(String input)
    {
        StringBuilder output = new StringBuilder();
        int backSpaceCount = 0, index = 0;
        boolean isBackSpace = false;

        for (int i = input.length() - 1; i >= 0; i--)
        {
            char c = input.charAt(i);
            if (c == '\b')
            {
                isBackSpace = true;
                backSpaceCount++;
            }
            else
                isBackSpace = false;

            if (!isBackSpace)
            {
                index = i - backSpaceCount; 
                if (index >= 0)
                    output.append(input.charAt(index));
            }
        }           
        output.reverse();
        return output.toString();
    }

【问题讨论】:

  • 代码审查问题并不真正符合 Stack Overflow 问题的标准。也许你应该试试codereview.stackexchange.com?我已投票以“离题”结束。

标签: java string telnet control-characters


【解决方案1】:

我会这样做

private String processBackspace(String input) {
    StringBuilder sb = new StringBuilder();
    for (char c : input.toCharArray()) {
        if (c == '\b') {
            if (sb.length() > 0) {
                sb.deleteCharAt(sb.length() - 1);
            }
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

【讨论】:

  • 啊,这更优雅 - 谢谢
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多