gpt4 book ai didi

java - 使用 Java Normalizer 将口音 ascii 转换为非口音但排除某些符号

转载 作者:行者123 更新时间:2023-11-29 05:26:09 24 4
gpt4 key购买 nike

我有一组带有重音符号的数据。我想将口音转换为简单的英文字母。我使用以下代码实现了这一点:

import java.text.Normalizer;
import java.util.regex.Pattern;

public String deAccent(String str) {
String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(nfdNormalizedString).replaceAll("");
}

但是这段代码缺少的是排除字符,我不知道如何从转换中排除某些字符,例如我想从 Düsseldorf 一词中排除字母“ü”所以当我转换时,它不会变成杜塞尔多夫的话。有没有办法将排除列表传递给方法或匹配器而不转换某些重音字符?

最佳答案

不要使用规范化来删除重音符号!

例如,使用您的方法无法识别以下字母:

  • đ

  • ħ

您可能还想将 œ 等连字拆分为单独的字母(即 oe)。

试试这个:

private static final String TAB_00C0 = "" +
"AAAAAAACEEEEIIII" +
"DNOOOOO×OUUUÜYTs" + // <-- note an accented letter you wanted
// and preserved multiplication sign
"aaaaaaaceeeeiiii" +
"dnooooo÷ouuuüyty" + // <-- note an accented letter and preserved division sign
"AaAaAaCcCcCcCcDd" +
"DdEeEeEeEeEeGgGg" +
"GgGgHhHhIiIiIiIi" +
"IiJjJjKkkLlLlLlL" +
"lLlNnNnNnnNnOoOo" +
"OoOoRrRrRrSsSsSs" +
"SsTtTtTtUuUuUuUu" +
"UuUuWwYyYZzZzZzs";

public static String toPlain(String source) {
StringBuilder sb = new StringBuilder(source.length());
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case 'ß':
sb.append("ss");
break;
case 'Œ':
sb.append("OE");
break;
case 'œ':
sb.append("oe");
break;
// insert more ligatures you want to support
// or other letters you want to convert in a non-standard way here
// I recommend to take a look at: æ þ ð fl fi
default:
if (c >= 0xc0 && c <= 0x17f) {
c = TAB_00C0.charAt(c - 0xc0);
}
sb.append(c);
}
}
return sb.toString();
}

关于java - 使用 Java Normalizer 将口音 ascii 转换为非口音但排除某些符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com