2016-11-18 159 views
1

从输入字符串我想摆脱非字母数字字符(:,-等),但保留拉丁字符。还用"-"替换空白空间" "删除非字母数字,但保留拉丁字符

这是我的尝试,但我不知道如何维护拉丁字符。

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 

在此先感谢

回答

2

使用[^\p{Alnum}\s]+Pattern.UNICODE_CHARACTER_CLASS选项,以使所有Unicode字母和digts:

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

详细

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 ]将匹配任何非字母数字或空格字符这不是一个拉丁字符。