无法验证JAVA中的ASCII CHARACTER 29打印

时间:2019-03-29 19:37:17

标签: java ascii

我正在使用JAVA,并且正在尝试将ASCII字符29(组分隔符)添加到字符串(字母数字)中,这是我算法的一部分。但是我无法验证输出,因为它没有被打印。

如果它是不可打印的字符,还有其他方法可以验证它是否确实被添加了。

尝试1)像打印其他任何ASCII字符一样打印2)打印其十六进制值(0x1D)

System.out.println("Test1====="+Character.toString((char)0x1D));

System.out.println("Test3====="+String.valueOf(Character.toChars(29)));

预期结果:验证其打印结果。 实际结果:无法验证。

2 个答案:

答案 0 :(得分:2)

也许编写一个遍历字符串并将每个字符与 Character.toChars(29)?类似于:

String str = "Foo Bar" + yourCharacter29ToString;
for(int i=0;i<str.length();i++){
if(Character.toChars(29) == str.charAt(i)){
 return true;
    }
  }
return false;

这足以作为概念证明。 (我没有检查上面的代码-请阅读为伪代码)

答案 1 :(得分:2)

要查看String中的哪些代码点,可以使用Character.getName(codepoint)

int[] codepoints = ("Test3====="+String.valueOf(Character.toChars(29)))
    .codePoints()
    .toArray(); // optionally, set up for traditional for loop

for (int codepoint : codepoints) {
    char[] utf16 = Character.toChars(codepoint); // always one or two code units

    if (utf16.length == 2) {
        System.out.println(
          String.format("U+%04X \\u%04X\\u%04X %s", 
            codepoint, (int)utf16[0], (int)utf16[1], Character.getName(codepoint)));

    } else {
        System.out.println(
          String.format("U+%04X \\u%04X %s", 
            codepoint, (int)utf16[0], Character.getName(codepoint)));
    }
}

UTF-16字符编码使用一个或两个代码单元(char)对Unicode字符集中的代码点进行编码。

(不确定ASCII字符集的存在与该项目或大多数项目是否相关。如果您有用于ASCII编码文本的字节,或者需要用于ASCII编码文本的字节,那是一个不同的问题。但是, Java将UTF-16用于文本数据类型。)