将字符串连接到java中的unicode

时间:2016-04-16 21:38:44

标签: java unicode concatenation

public class TruthTableValue {
    private boolean truthValue;
    private String name = "";

    private int unicodeStartNameValue = 41; /*
    * we want our String always to start with A and then go up the alphabet.
    * this can be done using the unicode 16.
    */

    public TruthTableValue() {
        truthValue = true;
        name += "\u00" + Character.toString((char)unicodeStartNameValue);
        unicodeStartNameValue++;
    }

    public String getName() {
        return name;
    }
}

在这段代码中,我试着让一个对象在每一代之后创建一个对象,其名称等于unicode“\ u00”+“41”或“42”或“43”等等(A, B,C等)。 我的问题是“\ u00”与编译器不符合“有效的unicode”,因此无法正确编译,也无法执行它。

如何解决编译错误或如何解决此问题?

提前致谢!

1 个答案:

答案 0 :(得分:2)

Java程序中的

"\u0041"编译器处理,而不是在运行时处理。如果Java编译器在程序中看到它,它会将其视为字符串"A"。 (这就是你收到错误的原因;如果\u后面没有四个十六进制数字,编译器就不知道该怎么办。)

如果你想在运行时将6个字符的字符串"\\u0041"转换为"A",你需要找到一个库方法。我不知道一个,无论如何,这是很难做到的。在Java中,char已经是一个数字。所以,如果你说

private char unicodeStartNameValue = 0x41;

而不是

private int unicodeStartNameValue = 41;

并继续向char添加1,您将拥有所需的字符,并且可以将它们转换为Character.toString(charValue)的字符串,这将返回1个字符的字符串。 (如果你只说41,那就是十进制数字,第一个字符是')',而不是'A'。)

无论如何,你的想法是行不通的,因为你无法得到"\u004a"。如果您保留一个十进制数并尝试将其附加到"\u00",您的序列将是A,B,C,D,E,F,G,H,I,P,Q,R,...... ,因为它会从"\u0049"跳到"\u0050"