2016-03-22 89 views
-1

我想檢查一個特殊字符,如{$是否存在於一個字符串中。我使用正則表達式,但在代碼審查期間,我被要求使用indexOf(),而不是正則表達式(作爲其成本較高)。我想了解如何使用indexOf()來識別特殊字符。 (我熟悉,這是可以做到的索引子)

String photoRoot = "http://someurl/${TOKEN1}/${TOKEN2}"; 
Pattern p = Pattern.compile("\\$\\{(.*?)\\}"); 
        Matcher m = p.matcher(photoRoot); 
        if (m.find()) { 
         // logic to be performed 
        } 
+0

你問如何使用indexOf來查明一個字符是否存在於一個字符串中,或​​者你正在詢問運行時複雜性? – MaxG

回答

1

還有一個indexOf(...)方法,但所有這些方法都將所有字符視爲相同,在使用這些方法時不需要轉義任何字符。

這裏是你如何通過使用一些indexOf(...)方法獲得兩個令牌:

String photoRoot = "http://someurl/${TOKEN1}/${TOKEN2}"; 
String startDelimiter = "${"; 
char endDelimiter = '}'; 
int start = -1, end = -1; 
while (true) { 
    start = photoRoot.indexOf(startDelimiter, end); 
    end = photoRoot.indexOf(endDelimiter, start + startDelimiter.length()); 
    if (start != -1 && end != -1) { 
     System.out.println(photoRoot.substring(start + startDelimiter.length(), end)); 
    } else { 
     break; 
    } 
} 
0

如果你只需要檢查2個字符作爲你的問題,答案是

var found = photoRoot.indexOf("$") >=0 ||| photoRoot.indexOf("?") >=0; 
0

它總是很難,而有矛盾的信息猜測。該代碼不尋找特殊字符,它搜索模式 - 和indexOf不會幫助你在那裏。

泰特斯的回答是好,以避免模式匹配,如果你需要找到模式${...}(相對於‘識別特殊字符’)

如果(作爲評論家似乎認爲),你只需要尋找任何一組特殊字符,你可以申請的indexOf(on_special_char)反覆的,但你也可以做

for(int i = 0; i < photoRoot.length(); ++i){ 
    if("${}".indexOf(photoRoot.charAt(i)) >= 0){ 
     // one of the special characters is at pos i 
    } 
} 

不知道從哪裏表現了「盈虧平衡」之間的目標串多的indexOf調用和(上圖)在包含特殊字符的(短)字符串上使用indexOf迭代目標。但是維護和允許動態適應這組特殊項目可能更容易。

當然,簡單

photoRoot.matches(".*" + Pattern.quote(specials) + ".*"); 

也是動態適應。