мы можем преобразовать целое число в символ - PullRequest
6 голосов
/ 28 марта 2010

мы можем преобразовать символ в целое число, эквивалентное значению ASCII того же самого, но можем ли мы сделать обратное, т.е. преобразовать данное значение ASCII в его символьный эквивалент?

public String alphabets(int[] num)
{
char[] s = new char[num.length];
String str = new String();
for(int i=0; i< num.length; i++)
{   
    s[i] = 'A' + (char)(num[i]- 1);
    str += Character.toString(s[i]);
}
return str;         
}

показывает возможную ошибку потери точности ...

Ответы [ 6 ]

8 голосов
/ 28 марта 2010

Для преобразования в / из:

int i = 65;
char c = (char)i;

char c = 'A';
int i = (int)c;
6 голосов
/ 29 марта 2010

Ошибка более сложная, чем вы могли подумать, потому что на самом деле это оператор «+», который вызывает «возможную потерю точности». Ошибка может быть устранена, если приведение приведено в действие:

s[i] = (char)('A' + (num[i]- 1));


Объяснение
В первом маркированном списке §5.6.2 двоичного числового продвижения в Спецификации языка Java указано, что:

Когда оператор применяет двоичное числовое продвижение к паре операндов [...], применяются следующие правила в порядке использования расширяющегося преобразования (§5.1.2) для преобразования операндов по мере необходимости:

  • Если какой-либо из операндов относится к ссылочному типу, выполняется преобразование без распаковки (§5.1.8). Тогда:
  • Если один из операндов имеет тип double, другой преобразуется в двойной.
  • В противном случае, если один из операндов имеет тип float, другой преобразуется в float.
  • В противном случае, если один из операндов имеет тип long, другой преобразуется в long.
  • В противном случае оба операнда преобразуются в тип int.

В следующем списке обозначено, что:

Двоичное числовое продвижение выполняется над операндами некоторых операторов:

  • Мультипликативные операторы *, / и% (§15.17)
  • Операторы сложения и вычитания для числовых типов + и - (§15.18.2)
  • Операторы числового сравнения и> = (§15.20.1)
  • Операторы числового равенства == и! = (§15.21.1)
  • Целочисленные побитовые операторы &, ^ и | (§15.22.1)
  • В каких случаях условный оператор? : (§15.25)

В вашем случае это означает:

s[i] = (int)'A' + (int)((char)(num[i] - (int)1));
отсюда и ошибка.
5 голосов
/ 28 марта 2010

Тебе даже не нужен актерский состав:

char c = 126;

И, похоже, это действительно работает и для символов Юникода. Например, попробуйте:

 System.out.println((int) 'โ'); // outputs 3650, a thai symbol
 char p = 3650;
 System.out.println(p); // outputs the above symbol
3 голосов
/ 28 марта 2010

Character.toChars

public static char[] toChars(int codePoint)

Преобразует указанный символ (кодовая точка Unicode) в его представление UTF-16, хранящееся в массиве символов.

1 голос
/ 28 марта 2010

Не работает ли приведение к char? 1002 *

0 голосов
/ 28 марта 2010

Есть несколько способов.Посмотрите на класс-оболочку Character.Character.digit() может добиться цели.На самом деле это делает трюк !!

Integer.valueOf('a')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...