从输入字符串中我想摆脱非字母数字字符(:
,-
等),但保留拉丁字符。同时将空格" "
替换为"-"
。
这是我的尝试,但我不知道如何维护拉丁字符。
String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("[^A-Za-z0-9 ]", "").replace(" ", "-").toLowerCase();
System.out.println(title);
输出:
neyo-how-are-yu-mate
期望的输出:
neyño-how-are-yóu-mate
提前致谢
答案 0 :(得分:3)
使用[^\p{Alnum}\s]+
和Pattern.UNICODE_CHARACTER_CLASS
选项保留所有Unicode字母和数字:
String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("(?U)[^\\p{Alnum}\\s]+", "").replace(" ", "-").toLowerCase();
System.out.println(title); // => neyño-how-are-yóu-mate
请参阅Java demo
<强>详情:
(?U)
- Pattern.UNICODE_CHARACTER_CLASS
option [^...]
- negated character class匹配任何不属于的单个字符:
+
- quantifier匹配1次或多次。答案 1 :(得分:3)
您还可以使用\p{IsLatin}
character property检测Java中的拉丁字符:
String title ="NEYÑO: HOW ARE YÓU MATE";
title = title.replaceAll("(?!\\p{IsLatin})[^A-Za-z0-9 ]", "").replace(" ", "-").toLowerCase();
System.out.println(title);
//=> neyño-how-are-yóu-mate
(?!\\p{IsLatin})[^A-Za-z0-9 ]
将匹配任何非拉丁字符的非字母数字或空格字符。