2012-11-11 53 views
1

我有一個字符串,我想使url友好。該字符串可能看起來像這樣:A string with $trange characters!".然後我想逃避所有不好的url字符,並最終與a-string-with-trange-characters創建一個URL友好的字符串

在Groovy中完成此操作的最佳方法是什麼?

+1

只需謹慎一點:如果您有兩個不同的部分「奇怪」字符串,您的方法有時會將它們解析爲**相同的URL友好的等價物。希望當你將這些包含在一個實際的URL中時,你還將包含一個唯一的數字標識符。此外,要注意給定字符串完全「奇怪」的情況,例如'ノー'或'$$$!',因爲在這種情況下,您的結果將是空的,您必須小心如何將它集成到URL中以避免形式爲http:// host/some/path// id',結果應該在'path'和'id'之間。 – vladr

回答

4

能完成這項工作?

string.replaceAll(/[^0-9a-zA-Z ]/, '').tr(' ', '-') 
+0

是的,它工作得很好。謝謝 – Ms01

4

在很多情況下,你可能希望不是完全剝離非字母數字字符,而是把它們分解第一:

import java.text.Normalizer 

println Normalizer.normalize("String with \$strang\u00E9 chars", Normalizer.Form.NFD) 
    .replaceAll(/[^A-z0-9 ]/, "") 
    .replaceAll(/ +/, "-") 

在上面,\u00E9是「E」。分解將其轉換爲字符'e'和組合標記'''。因此,當你應用轉換時,結果是'陌生'而不是'strang-'。

請注意,這不是獲取給定字符串的ASCII友好版本的全部內容......例如,它不會將'ß'轉換爲'ss'。我沒有意識到在Java/Groovy中使用toUpperCase()的最好方法是在初始字符串中使用toLowerCase(),這似乎有點「哈克」)。

+0

+1分解觸摸 – vladr