package com.iambookmaster.server; /** * Класс переводит русский текст в транслит. Например, строка "Текст" будет * преобразована в "Tekst". * User: Deady * Date: 04.12.2007 * Time: 15:56:47 * http://www.sql.ru/forum/actualthread.aspx?bid=38&tid=502128&pg=2 */ public class Translit { private static final String[] charTable = new String[81]; private static final char START_CHAR = 'Ё'; static { charTable['А'- START_CHAR] = "A"; charTable['Б'- START_CHAR] = "B"; charTable['В'- START_CHAR] = "V"; charTable['Г'- START_CHAR] = "G"; charTable['Д'- START_CHAR] = "D"; charTable['Е'- START_CHAR] = "E"; charTable['Ё'- START_CHAR] = "E"; charTable['Ж'- START_CHAR] = "ZH"; charTable['З'- START_CHAR] = "Z"; charTable['И'- START_CHAR] = "I"; charTable['Й'- START_CHAR] = "I"; charTable['К'- START_CHAR] = "K"; charTable['Л'- START_CHAR] = "L"; charTable['М'- START_CHAR] = "M"; charTable['Н'- START_CHAR] = "N"; charTable['О'- START_CHAR] = "O"; charTable['П'- START_CHAR] = "P"; charTable['Р'- START_CHAR] = "R"; charTable['С'- START_CHAR] = "S"; charTable['Т'- START_CHAR] = "T"; charTable['У'- START_CHAR] = "U"; charTable['Ф'- START_CHAR] = "F"; charTable['Х'- START_CHAR] = "H"; charTable['Ц'- START_CHAR] = "C"; charTable['Ч'- START_CHAR] = "CH"; charTable['Ш'- START_CHAR] = "SH"; charTable['Щ'- START_CHAR] = "SH"; charTable['Ъ'- START_CHAR] = "'"; charTable['Ы'- START_CHAR] = "Y"; charTable['Ь'- START_CHAR] = "'"; charTable['Э'- START_CHAR] = "E"; charTable['Ю'- START_CHAR] = "U"; charTable['Я'- START_CHAR] = "YA"; for (int i = 0; i < charTable.length; i++) { char idx = (char)((char)i + START_CHAR); char lower = new String(new char[]{idx}).toLowerCase().charAt(0); if (charTable[i] != null) { charTable[lower - START_CHAR] = charTable[i].toLowerCase(); } } } /** * Переводит русский текст в транслит. В результирующей строке * каждая русская буква будет заменена на соответствующую английскую. * Не русские символы останутся прежними. * * @param text исходный текст с русскими символами * @return результат */ public static String toTranslit(String text) { char charBuffer[] = text.toCharArray(); StringBuilder sb = new StringBuilder(text.length()); for (char symbol : charBuffer) { int i = symbol - START_CHAR; if (i>=0 && i<charTable.length) { String replace = charTable[i]; sb.append(replace == null ? symbol : replace); } else { sb.append(symbol); } } return sb.toString(); } }