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