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”,因此无法正确编译,也无法执行它。
如何解决编译错误或如何解决此问题?
提前致谢!
答案 0 :(得分:2)
"\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"
。