2011-05-09 83 views
1

我想將字符串以更可查詢的類似slug的格式存儲到數據庫中,強制爲小寫,用拉丁對應字母替換重音字母(ä→a,ö→o, ç - > C等),並用例如。替換其他特殊字符破折號。這種格式是否有標準?在Java中實現它最好的方法是什麼?創建可查詢的字符串

+0

我會看看這篇文章:http://stackoverflow.com/questions/249087/how-do-i-remove-diacritics-accents-from-a-string-in-net – MikeKusold 2011-05-09 13:46:33

回答

0

這是解決方案,我發現目前爲止效果最好:

return Normalizer 
    .normalize(src.trim().toLowerCase(Locale.ENGLISH), 
     Normalizer.Form.NFD) 
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "") 
    .replaceAll("[^\\p{ASCII}]+", "-") 
    .replaceAll("[^a-z0-9]+", "-").replaceAll("(^-|-$)+", ""); 

這轉換:¿到que,Cool !!!! 1到cool-1和åæø到a。

0

數據庫可以通過排序來爲你做這件事。排序規定了特定字符集中的哪些字符在比較時可以被認爲是相同的。

看一看這對一個核對的視覺例如:

http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html

這裏的排序規則是如何從MySQL手冊工作一個很好的說明:

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

+0

我正在尋找數據庫提供者無知的解決方案,因爲我的後端很可能不會支持。 – hleinone 2011-05-09 14:23:37

+0

你可以試試這個庫:[鏈接](http://site.icu-project.org/#TOC-Why-ICU4J-)。它允許您使用Java中的字符集歸類,但不確定它是否符合您的特定用例。 – Eric 2011-05-09 14:39:24

+0

Java ['Normalizer'](http://download.oracle.com/javase/6/docs/api/java/text/Normalizer.html)似乎將它們按照與您提供的那些MySQL鏈接類似的方式分組,我會留下像ð,ø和æ這樣的字符。我想最終只是a-z和破折號。 – hleinone 2011-05-09 20:28:16