如何使用带变量的unicode转义序列?

时间:2015-02-21 20:28:04

标签: java unicode compiler-errors unicode-escapes

这是我目前必须使用java在循环(扫描次数)中连接a b然后c等等的代码:

public String toString()
{
  String answers = "";
  int numChoices = choices.length;
  char letter;
  String result;
  int letterNum = 0061;
  while (numChoices > 0)
  {
     letter = "\u" + letterNum;
     result  = letter + ") " + choices[choices.length-numChoices] + "\n";
     answers += result;
     numChoices --;
     letterNum ++;
  }

  return question + "\n" + answers;
}

我认为unicode转义序列是我最好的选择,但它没有像我尝试的那样工作,所以我显然做错了什么。我该如何解决这个问题?

我得到的错误是:

MultChoice.java:40: illegal unicode escape
     letter = "\u" + letterNum;

2 个答案:

答案 0 :(得分:1)

在解析之前,Unicode转义由编译初期的javac, very 处理。编译器永远不会看到Unicode转义,只看到代码点。因此,您无法在运行时使用它们。相反,试试这个:

public String toString()
{
  String answers = "";
  int numChoices = choices.length;
  char letter = 'a';
  String result;
  while (numChoices > 0)
  {
     result  = "" + letter + ") " + choices[choices.length-numChoices] + "\n";
     answers += result;
     numChoices --;
     letter ++;
  }

  return question + "\n" + answers;
}

char只是一个无符号的16位整数,所以你可以用它做所有正常的整数,比如递增。不需要单独的int - 'a'(char) 0x61是相同的。

答案 1 :(得分:0)

letterNum的值为49(八进制为61),因此变为"\u49",这是无效的。

您可能应该使用0x0061,然后使用String将其转为Integer.toHexString(letterNum)

修改:您似乎无法使用String创建"\u" + something

所以,可能的方法是Character.toString((char) letterNum)