2015年4月24日 星期五

【筆記】在Java中使用正規表示式(Regular Expression)切割字串

在工作上若碰到要在一行字串去擷取資料時,如下面記錄某年某月某日某地區的某個數值:
1990Mar02Taipei28
常是以substring算好位置去截取各個資料,若有時可能應程式更新造成了一些例外,如上面的月份是英文簡寫,但程式更新後,記錄月份的方式變成:
1991March03Tainan35
這時若再用substring來切字串,就可能要做一些判斷來算位置。

當每一行資料的模式都是一樣時,如上面兩筆資料,都是數字、英文字、數字、英文字、數字時,就可以使用Pattern(文件)搭配Matcher(文件),以正規表示式來切字串:
package idv.jk.util.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatcherTest
{
    public static void main(String[] arv)
    {
        String input = "1990Mar02Taipei28\r\n1991March03Tainan35";
        Pattern pattern = Pattern.compile("(\\d+)(\\D+)(\\d+)(\\D+)(\\d+)",
                                            Pattern.MULTILINE);

        Matcher matcher = pattern.matcher(input);

        while(matcher.find())
        {
            System.out.println("The value at " + matcher.group(4) +
                                    " in " + matcher.group(2) +
                                    " " + matcher.group(1)+
                                    " is " + matcher.group(5));
        }
    }
}
結果為:
The value at Taipei in Mar 1990 is 28
The value at Tainan in March 1991 is 35
上面範例用簡單的資料,來說明正規表示式的功用,在現實的工作上,資料模式通常都複雜許多,但若能熟悉正規表示式並應用得當,在檔案處理上必能得心應手。

若想進一步鑽研,可以考慮這一本:


它也有中文版,XD

沒有留言: