Java StringBuilder附加垂直制表符失败

时间:2014-04-23 11:32:17

标签: java ascii stringbuilder

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

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

我需要在String中看到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
}

如何实现这一目标?

编辑:

我需要在调试器中看到原始String中的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
}

2 个答案:

答案 0 :(得分:2)

垂直制表符是空格,因此您无法“看到它”。您期望 垂直标签的视觉效果是什么?垂直制表符ASCII字符为a historical artefact,可以追溯到电传类型的日期。对于显示文本的VDU和windoing系统,它没有普遍接受的特殊含义。

答案 1 :(得分:1)

我猜,显示输出的控制台根本不支持该字符。不能将它传递给stdout或者结果字符串不包含你的角色。