用普通字母字符替换重音字符
Replacing Accented Characters With Plain Alphabet Characters
如何用纯字母字符替换重音字符?
在您将此问题标记为重复之前:
我尝试了各种解决方案,但 none 对我有用。
见以下代码:
import org.apache.commons.lang3.StringUtils;
import java.text.Normalizer;
import java.util.regex.Pattern;
public class AccentsTest
{
public static void main(String[] arguments)
{
String textWithAccents = "Et ça sera sa moitié.";
System.out.println(textWithAccents);
System.out.println(stripAccents(textWithAccents));
System.out.println(deAccent(textWithAccents));
System.out.println(normalize(textWithAccents));
System.out.println(stripAccents2(textWithAccents));
}
//
public static String stripAccents(String s)
{
return StringUtils.stripAccents(s);
}
//
public static String deAccent(String str)
{
String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(nfdNormalizedString).replaceAll("");
}
//
public static String normalize(String string)
{
string = Normalizer.normalize(string, Normalizer.Form.NFD);
string = string.replaceAll("[^\p{ASCII}]", "");
return string;
}
//
public static String stripAccents2(String s)
{
s = Normalizer.normalize(s, Normalizer.Form.NFD);
s = s.replaceAll("[\p{InCombiningDiacriticalMarks}]", "");
return s;
}
}
它输出:
Et ?a sera sa moiti?.
Et ?a sera sa moiti?.
Et ?a sera sa moiti?.
Et a sera sa moiti.
Et ?a sera sa moiti?.
但是,我希望它以纯字母字符输出文本,如下所示:
Et ca sera sa moitie.
怎么办?我的 IDE 有问题吗?我正在使用 IntelliJ
.
这是一个编码问题。如果我将 .java
源文件的编码更改为 UTF-8
而不是 windows-1252
,代码示例将通过输出预期的文本正常工作。
如何用纯字母字符替换重音字符?
在您将此问题标记为重复之前:
我尝试了各种解决方案,但 none 对我有用。
见以下代码:
import org.apache.commons.lang3.StringUtils;
import java.text.Normalizer;
import java.util.regex.Pattern;
public class AccentsTest
{
public static void main(String[] arguments)
{
String textWithAccents = "Et ça sera sa moitié.";
System.out.println(textWithAccents);
System.out.println(stripAccents(textWithAccents));
System.out.println(deAccent(textWithAccents));
System.out.println(normalize(textWithAccents));
System.out.println(stripAccents2(textWithAccents));
}
//
public static String stripAccents(String s)
{
return StringUtils.stripAccents(s);
}
//
public static String deAccent(String str)
{
String nfdNormalizedString = Normalizer.normalize(str, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\p{InCombiningDiacriticalMarks}+");
return pattern.matcher(nfdNormalizedString).replaceAll("");
}
//
public static String normalize(String string)
{
string = Normalizer.normalize(string, Normalizer.Form.NFD);
string = string.replaceAll("[^\p{ASCII}]", "");
return string;
}
//
public static String stripAccents2(String s)
{
s = Normalizer.normalize(s, Normalizer.Form.NFD);
s = s.replaceAll("[\p{InCombiningDiacriticalMarks}]", "");
return s;
}
}
它输出:
Et ?a sera sa moiti?.
Et ?a sera sa moiti?.
Et ?a sera sa moiti?.
Et a sera sa moiti.
Et ?a sera sa moiti?.
但是,我希望它以纯字母字符输出文本,如下所示:
Et ca sera sa moitie.
怎么办?我的 IDE 有问题吗?我正在使用 IntelliJ
.
这是一个编码问题。如果我将 .java
源文件的编码更改为 UTF-8
而不是 windows-1252
,代码示例将通过输出预期的文本正常工作。