有时候您并不是想要简单地删除字符,而只是想要删除重音符号。我设计了以下的实用类,我会在我的Java REST Web项目中使用它,每当我需要在URL中包含一个字符串时:
import java.text.Normalizer;
import java.text.Normalizer.Form;
import org.apache.commons.lang.StringUtils;
public abstract class TextUtils {
private static String[] searchList = { "Ä", "ä", "Ö", "ö", "Ü", "ü", "ß" };
private static String[] replaceList = { "Ae", "ae", "Oe", "oe", "Ue", "ue",
"sz" };
public static String normalize(String s) {
if (s == null)
return null;
String n = null;
n = StringUtils.replaceEachRepeatedly(s, searchList, replaceList);
n = Normalizer.normalize(n, Form.NFD).replaceAll("[^\\p{ASCII}]", "");
return n;
}
public static String slugify(String s) {
if (s == null)
return null;
String n = normalize(s);
n = StringUtils.lowerCase(n);
n = n.replaceAll("[\\s.:;&=<>/]", "");
return n;
}
}
作为一个德语使用者,我已经包含了德语umlauts的正确处理 - 这个列表应该很容易扩展到其他语言。
希望有所帮助。
编辑:请注意,在URL中包含返回的字符串可能不安全。 为了防止XSS攻击,您至少应该对其进行HTML编码。