Ответ состоит из трех частей
- Получить код Unicode для каждого символа
- Определить, находится ли он на странице кириллицы
- Преобразовать в шестнадцатеричное.
Чтобы получить каждый символ, вы можете перебрать строку, используя методы charAt()
или toCharArray()
.
for( char c : s.toCharArray() )
Значение char является значением Unicode.
Символ кириллицы - это любой символ в следующих диапазонах:
Cyrillic: U+0400–U+04FF ( 1024 - 1279)
Cyrillic Supplement: U+0500–U+052F ( 1280 - 1327)
Cyrillic Extended-A: U+2DE0–U+2DFF (11744 - 11775)
Cyrillic Extended-B: U+A640–U+A69F (42560 - 42655)
Если он находится в этом диапазоне, он является кириллицей.Просто выполните проверку, если.Если он находится в диапазоне, используйте Integer.toHexString()
и добавьте "\\u"
.Все вместе это должно выглядеть примерно так:
final int[][] ranges = new int[][]{
{ 1024, 1279 },
{ 1280, 1327 },
{ 11744, 11775 },
{ 42560, 42655 },
};
StringBuilder b = new StringBuilder();
for( char c : s.toCharArray() ){
int[] insideRange = null;
for( int[] range : ranges ){
if( range[0] <= c && c <= range[1] ){
insideRange = range;
break;
}
}
if( insideRange != null ){
b.append( "\\u" ).append( Integer.toHexString(c) );
}else{
b.append( c );
}
}
return b.toString();
Редактировать: , вероятно, следует выполнить проверку c < 128
и повернуть тела if
и else
;вы вероятно должны избежать всего, что не является ASCII.Я был, вероятно, слишком буквальным в моем чтении вашего вопроса.