indexOf()vs regex用于标识$和{等特殊字符

时间:2016-03-22 02:11:43

标签: java regex indexof

我想检查字符串中是否存在{$这样的特殊字符。我使用了regexp,但在代码审查期间,我被要求使用indexOf()而不是regex(因为它更昂贵)。我想了解indexOf()如何用于识别特殊字符。 (我很熟悉这可以用来索引子串)

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

4 个答案:

答案 0 :(得分:2)

有多个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;
    }
}

答案 1 :(得分:0)

如果你只想找到几个不同的特殊字符,你只需要使用indexOf(“$”)或indexOf(“}”)。您需要单独指定要查找的每个特殊字符。

没有办法让它在一个语句中找到每个特殊字符的索引:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)

答案 2 :(得分:0)

如果您只需要在问题中检查2个字符,答案就是

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

答案 3 :(得分: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
    }
}

不确定表现在哪里&#34;收支平衡&#34;在目标字符串上的多个indexOf调用和目标上的(上面)迭代之间,包含特殊符号的(短)字符串上的indexOf是。但是维护并允许动态适应特殊组合可能更容易。

当然,简单

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

也具有动态适应性。