今天寫程序的時候遇到判斷需要使用多個if(){}else{}語句,觀察了一下需要判斷的條件,發現判斷的條件可以變為對條件最后幾個漢字的判斷,就想用正則表達式來對漢字判斷,寫完后,想到可以用Java中String類的endwith()方法來對漢字實現匹配,例如
String str="世界你好我喜歡編程";
if(str.endwith("編程")){
dosomething();
}else{
dosomething();
}
以下是endwith()方法的源碼:
public boolean startsWith(String paramString, int paramInt) { char[] arrayOfChar1 = this.value; int i = this.offset + paramInt; char[] arrayOfChar2 = paramString.value; int j = paramString.offset; int k = paramString.count; if ((paramInt < 0) || (paramInt > this.count - k)) return false; while (true) { k--; if (k < 0) break; if (arrayOfChar1[(i++)] != arrayOfChar2[(j++)]) return false; } return true; } public boolean startsWith(String paramString) { return startsWith(paramString, 0); } public boolean endsWith(String paramString) { return startsWith(paramString, this.count - paramString.count); }
char類型可以存儲一個中文漢字,因為Java中使用的編碼是Unicode(不選擇任何特定的編碼,直接使用字符在字符集中的編號,這是統一的唯一方法),
一個char類型占2個字節byte(16比特bit),所以放一個中文是沒問題的。
1:“字節”是byte,“位”是bit ;
2: 1 byte = 8 bit ;
char 在Java中是2個字節。java采用unicode,2個字節(16位)來表示一個字符。
java是用unicode來表示字符,中文字符的unicode就是2個字節。
正則表達式匹配中文:
package test1; import java.util.regex.Pattern; public class patterntest { public static void main(String[] args) { String str = "編程世界你好,我愛編程"; System.out.println(Pattern.compile("[編][程]").matcher(str).find()); } }
在對String進行匹配時沒有使用 str.matches("[編][程]"),如果使用則返回的式false。
在Java API中對matches(String regx) 的返回說明:當且僅當此字符串匹配給定的正則表達式時,返回 true,也就是說,你給定的正則表達式需要與整個字符串匹配才會返回true,而現在的情景相當於在字符串中去查找有沒有某個特定的字符串,所以不能使用matches(String regx)方法。
注意:在寫匹配規則時,需要將匹配的漢字分別用[]隔開匹配。