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
沒有留言:
張貼留言