[java] строки в юникоде

koly

Есть такая проблема: не компилируется следующий код:
    
public static String tables =
"\u0000\u0001\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002"+
"\u0003\u0004\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002"+
"\u0005\u0006\u0007\u0002\u0002\u0002\u0002\u0002\u0002\u0002"+
"\u0008\u0009\u000A\u000B\u000C\u000D\u0002\u0002\u0002\u0002"+
"\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0002\u0002\u0002"+
"\u0015\u0016\u0010\u0017\u0018\u0019\u001A\u0002\u0002\u0002"+
"\u001B\u001C\u001D\u001E\u001F\u0020\u0002\u0002\u0002\u0002"+
"\u0021\u0022\u0023\u0024\u0002\u0002\u0002\u0002\u0002\u0002"+
"\u0025\u0026\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002"+
"\u0027\u0028\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002";

Ошибки:
unclosed string literal
illegal character
Что с этим делать?

Dasar

Может где-нибудь 'u' - не 'u', или, например, вместо английской 'C" стоит русская 'С'?

koly

не смешно

Dasar

Ты точно уверен, что это не так?
illegal character - как раз на такое обычно указывает.

koly

уверен. похоже уже нашел ошибку

Helga87

раз
два
Короче говоря, они предлагают вместе \u000A писать \n, вместо \u005c писать \\ и так для еще нескольких (\r, \", \')

koly

да, я нашел альтернативу - прибавляю при создании строки ко всем символам большую константу, а потом в нужный момент ее отнимаю (строка генерится автоматически)

Helga87

Грамотнее все-таки сделать так, как они говорят. Иначе у тебя возможно на некоторых символах все равно падать будет.

koly

все перечисленные символы находятся в кодировке ASCII, поэтому если прибавлять 256, то точно все будет ок

koly

видимо господа модеры поработали ....
Те кто делал C тоже думали, что им не нужно будет нулевой символ внутри строки иметь.
Ну и огребли проблем. И тебе успехов.
Да, есть одна большая разница между массивами java и С. В С можно задавать константные массивы, которые отобразятся 1:1в соответствующие последовательности байтов внутри obj файла. А в java это можно сделать только с помощью строк, т. к. конструкция
a = new int[] {
1,2,3
}
в java компилируется вот во что:
a = new int [3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
А это сильно увеличивает размер *.class файла. Если учесть, что я пишу для мобильника, то констнатные строке - единственный выход ...
Оставить комментарий
Имя или ник:
Комментарий: