【问题标题】:Java StringBuilder Appending Vertical-Tab Character FailsJava StringBuilder 附加垂直制表符失败
【发布时间】:2014-06-08 05:03:25
【问题描述】:

我从 InputStream 接收数据,我有一个 ASCII 字符 11,它是一个垂直制表符。我可以在调试器中看到垂直选项卡 11。一旦我尝试将该字符附加到 StringBuilder,它就会被附加并且长度会增加。

但是,问题是当返回字符串时,ASCII 字符会丢失,但在执行 stringBuilder.toString().toCharArray() 时,可以看到 ASCII 字符 11。

我需要在字符串中看到 ASCII 字符 11。

public static void main(String[] args) {
     // Receive data from InputStream
     int read = inputStream.read();
     StringBuilder stringBuilder = new StringBuilder();
     stringBuilder.append((char) read); // /u000b is ' '
     stringBuilder.append("H");
     System.out.println(stringBuilder.toString()); // prints H
     char[] characters = stringBuilder.toString().toCharArray(); // length 2
}

如何实现?

编辑:

我需要在调试器中查看原始字符串中的 ASCII 字符。例如:

public String getOriginalString() {
    return originalString;
}

public String process(String originalString) {
     return modifiedString;
}

编辑:

public String buildMessage(InputStream inputStream) throws Exception {
    StringBuilder message = null;
    if(inputStream != null) {
        message = new StringBuilder();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        int byteRead = bufferedInputStream.read();
        while(byteRead != -1) {
            char value = (char) byteRead;
            message.append(value);
            // check how many bytes available
            if(bufferedInputStream.available() != 0) {
                byteRead = bufferedInputStream.read();
            }
            else {
                // to avoid blocking of data
                break;
            }
        }
    }
    char[] characters = message.toString().toCharArray(); // returns length 2
    return message.toString();
}

public static void main(String[] args) {
    String i = buildMessage(inputStream);
    char[] characters = i.toCharArray(); // ASCII characters lost
    StringBuilder stringBuilder = new StringBuider(i);
    char[] characters2 = stringBuilder.toString().toCharArray(); // ASCII characters lost
}

【问题讨论】:

  • 发布一个最小但完整的程序来显示问题。
  • 这不是一个完整的程序。我无法运行它并重现问题。这是一个,当然不会重现问题:gist.github.com/jnizet/11212992

标签: java ascii stringbuilder


【解决方案1】:

垂直制表符是空白,因此您无法“看到它”。您期望 垂直选项卡的视觉外观是什么?垂直制表符 ASCII 字符是 a historical artefact,可追溯到电传打字机时代。对于显示文本的 VDU 和卷绕系统,它没有普遍接受的特殊含义。

【讨论】:

  • 我不想看到它。我需要将此字符串传递给另一个方法,该方法将包含带有 ASCII 字符的原始数据,以便可以进行进一步处理。
  • @user3189663 是什么让您认为该字符串不包含它?确实如此,因为字符串的长度是 2。
  • 正确。以上只是代码示例,但是当方法返回和执行 string.toString().toCharArray() 时,ASCII 字符会丢失。
【解决方案2】:

我猜,显示输出的控制台根本不支持该字符。它不可能不传递给标准输出或生成的字符串不包含您的字符。

【讨论】:

  • 没错,返回使用的结果字符串不包含ASCII字符。
  • @user3189663:您没有向我们展示任何“返回”字符串的代码。
猜你喜欢
  • 2012-11-23
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多