2007-03-29

[Gain] Highlight Keywords

專案上遇到的一個需求:輸入一個關鍵字進行查詢,必須將查詢結果中該關鍵字進行『高光』(highlight)。

首先,查詢不管是用db或index(Lucene)都可以『不分大小寫』,然後將查詢結果在顯示時用replace的方式在關鍵字的前後加上highlight,像是:
    春天    ->    <b>春天</b>
中文關鍵字沒啥問題,麻煩在英文字highlight上,如果原文是這樣『Spring spring SPRING』,按照之前的作法就會變成『<b>spring</b> <b>spring</b> <b>spring</b>』,原文的大小寫不見了。
問題就在於『尋找』可以不分大小寫,但是『取代』只能用一種方式,就是當初指定要不分大小寫的樣子。

後來在RE找到救贖:

String inputStr = "Spring spring SPRING";
// 不分大小寫作搜尋,括號是重點
Pattern pattern = Pattern.compile("(spring)", Pattern.CASE_INSENSITIVE);
// Pattern pattern = Pattern.compile("(?i)(spring)");
Matcher matcher = pattern.matcher(inputStr);
// $0 表示第一組括號內的字串
String result = matcher.replaceAll("<b>$0</b>");
// <b>Spring</b> <b>spring</b> <b>SPRING</b>
System.out.println(result);

沒有留言:

張貼留言