一、搜尋字串中的某片段字串:
int indexOf(Pattern pattern, [int start])
在原字串中搜尋某指定字串片段(pattern) 第一次出現的位置,也可從指定的起始位置(start)處開始搜尋,最後回傳搜尋到的字串片段起始位置,或是 -1 代表找不到指定的字串片段。
int lastIndexOf(Pattern pattern, [int start])
在原字串中搜尋某指定字串片段(pattern)最後一次出現的位置,也可從指定的起始位置(start)處開始搜尋,最後回傳搜尋到的字串片段起始位置,或是 -1 代表找不到指定的字串片段。
二、截取字串中的某字串片段
String substring(int startIndex, [int endIndex])
從字串中指定的起始位置(startIndex) 開始截取字串片段直到字串結尾,或是直到指定的結束位置(endIndex)
以下是結合上述兩個方法所演示的字串處理範例,目的在於從宣告的字串 code 中,將數字的部份去除只保留英文字母的部份。
main() {
String code = "3955PVRR65E4AGE29566A04G7540A531YO49A49AAA2O32AARX"
"AF36A527A2N2AAD6AAG2458A46AA593V22U2300T521A3AKA1A"
"0Z0CS43F53AA9A1QA6E33TC6A9M9AAA2Y03A5SAF4O131AX4KR"
"FAAF349Y4A31A87A9027913735B9OR2A9A7RH506248A4173P4";
int startIndex = 0;
int endIndex = 0;
var patternAlphabets = new RegExp("[A-Z]"); var patternDigitals = new RegExp("[0-9]"); StringBuffer sb = new StringBuffer(); do { //從 startIndex 開始尋找到以字母為開頭的索引位置 if ((startIndex = code.indexOf(patternAlphabets , startIndex)) >= 0) { //字母為開頭的字串索引位置開始找到以數字為開頭的索引位置 //因為 startIndex 已經是指到以字母為開頭的位置,所以從下一個位置(startIndex+1)開始找起 endIndex = code.indexOf(patternDigitals , startIndex+1);
//將只有字母的字串剪下後寫入到 StringBuffer 中 sb.write(code.substring(startIndex, endIndex)); //將下次輪迴的起點設在結束索引的下一個位置(endIndex+1) startIndex = endIndex + 1; } //直到找不到任何以字母為開頭字串後才結束 } while (startIndex >= 0); //印出只有字母字串的結果 print(sb.toString()); }
輸出:
PVRREAGEAGAYOAAAAOAARXAFAANAADAAGAAAVUTAAKAAZCSFAAAQAETCAMAAAYASAFOAXKRFAAFYAAABORAARHAP
(註:以上範例只為示範 indexOf 及 subString 的用法,非問題的最佳解)
沒有留言:
張貼留言