How to convert from Katakana to Hiragana?
I want to convert a Japanese character string from katakana to hiragana. Leaving all characters other than katakana as is.
I have tried with toUpperCase and toLowerCase with the Locale JAPANESE, but both leave the string unmodified.
public class KataKanaAHiragana {
static String entrada = "スタックオベルフロウ";
public static void main(String[] args) {
System.out.println( entrada.toUpperCase(Locale.JAPANESE) );
System.out.println( entrada.toLowerCase(Locale.JAPANESE) );
}
}
The result I get in both cases is:
スタックオベルフロウ
And what I want to get is:
すたっくおべるふろう
3
Author: Anonymous Coward, 2015-12-24
2 answers
Important
There are two versions of Katakana, half-width and full-width.
We need to determine the version!
public static String AHiragana(String KatakanaString)
{
StringBuilder sb = new StringBuilder();
for(Character c : KatakanaString.toCharArray())
{
// Es un character medio-ancho?
if(('\uff66' <= c) && (c <= '\uff9d'))
{
sb.append((char)(c-0xcf25));
}
else if(('\u30a1' <= c) && (c <= '\u30fe')) // ancho-completo
{
sb.append((char)(c-0x60));
}
else
{
sb.append(c);
}
}
return sb.toString();
}
4
Author: Dylan Meeus, 2020-06-11 10:54:57
I have been able to solve it based on the Code that Arturo Tena mentions.
private static final int KATAKANA_A_HIRAGANA = - 6 * 16;
public static String katakanaAHiragana(String cadena) {
StringBuilder resultado = new StringBuilder( cadena.length() );
for (int indice = 0; indice < cadena.length(); indice++) {
final char caracter = cadena.charAt(indice);
final char carConvertido;
if ( caracter == 'ー') {
// 'ー' es un carácter que también puede ser usado
// en katakana y que se deja igual en hiragana.
carConvertido = caracter;
} else if ( caracter>='ァ' && caracter<='ヴ' ) {
carConvertido = (char) (((int) caracter) + KATAKANA_A_HIRAGANA );
}
else
{
// No tocar los caracteres que no son katakana
carConvertido = caracter;
}
resultado.append(carConvertido);
}
return resultado.toString();
}
1
Author: Anonymous Coward, 2015-12-24 09:27:54