$や{

2016-03-22 10 views
-1

のような特殊文字を識別するためのindexOf()と正規表現は、{または$のような特殊文字が文字列内に存在するかどうかをチェックしたいと思います。私はregexpを使用しましたが、コードレビュー中に、regexの代わりに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(...)メソッドがありますが、すべてがすべての文字を同じに扱うので、これらのメソッドを使用している間に任意の文字をエスケープする必要はありません。

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

あなただけのあなただけの「}」(のindexOf(「$」)またはのindexOfを使用すると思い異なる特殊文字のカップルを見つけるために探している場合)。個別に検索したい特殊文字をそれぞれ指定する必要があります。

それは1つのステートメントですべての特殊文字のインデックスを見つける持っているけれども方法はありません。https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)

0

あなたがちょうどあなたの質問のように2つの文字をチェックする必要がある場合は、答えは

var found = photoRoot.indexOf("$") >=0 ||| photoRoot.indexOf("?") >=0; 
になります
0

それは情報が矛盾している間に推測することは常に難しい:ここ

あなたはindexOf(...)メソッドの一部を使用して、2つのトークンを得ることができる方法です。コードでの特殊文字が検索されない場合、パターンが検索され、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) + ".*"); 

も動的に適応可能です。