El primero es convertir caracteres chinos a pinyin:
dependencias de importación:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
Cree un método estático para Pinyin para la conversión de pinyin, que también se puede encapsular en una clase de herramienta y llamar mediante la clase de herramienta:
public static String toPinyin(String chinese){
String pinyinStr = "";
char[] newChar = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < newChar.length; i++) {
if (newChar[i] > 128) {
try {
pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}else{
pinyinStr += newChar[i];
}
}
return pinyinStr;
}
La llamada en el método es exitosa. Aquí necesito poner mayúsculas y mantener espacios entre cada carácter chino. La operación es la siguiente:
String name="西青果颗粒藏青果颗";
String[] split = name.split("");
String finalPy="";
for (String s : split) {
String s1 = toPinyin(s).toUpperCase(Locale.ROOT);
finalPy= finalPy+" "+s1;
}
System.out.println(finalPy.trim());
Aquí todo está bien, pero si la cadena contiene símbolos especiales que no están en inglés, se informará un error de la siguiente manera:
Aquí debe reemplazar varios símbolos en chino con los que están en inglés:
use el método replaceAll de String para reemplazar, como se muestra en la imagen:
Más tarde, aparecieron varios símbolos romanos. Este método es demasiado problemático. Puede juzgar si cada carácter es un carácter chino. Si es un carácter chino, llame al método toPinyin para convertirlo. Si no es un carácter chino, no se convertirá. Hay muchas maneras de lograrlo. Aquí Use uno: juzgue por el rango de codificación Unicode:
Pattern p2 = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m2 = p2.matcher(s);
Se puede ver que no importa cuál sea el símbolo, se emitirá tal como es, y
aquí hay otros rangos de codificación:
tipo | alcance |
---|---|
personaje chino | [0x4e00,0x9fa5] |
número | [0x30,0x39] |
Letras minusculas | [0x61,0x7a] |
letra mayúscula | [0x41,0x5a] |
Enlace de referencia: el método para juzgar si una cadena es china en Java