0

这是我目前必须使用 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;
4

2 回答 2

2

Unicode 转义由 javac 处理,在编译早期,在解析之前。编译器永远不会看到 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;
}

Achar只是一个无符号的 16 位整数,所以你可以用它做所有普通的整数事情,比如增量。不需要单独的int-'a'并且(char) 0x61是同一件事。

于 2015-02-21T20:40:54.773 回答
0

的值为letterNum49(八进制为 61),因此变为"\u49",无效。

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

编辑:您似乎无法创建Stringusing "\u" + something.

所以,一种可能的方式是Character.toString((char) letterNum)

于 2015-02-21T20:37:03.073 回答