Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java indexOf()vs regex用于识别特殊字符,如$和{_Java_Regex_Indexof - Fatal编程技术网

Java indexOf()vs regex用于识别特殊字符,如$和{

Java indexOf()vs regex用于识别特殊字符,如$和{,java,regex,indexof,Java,Regex,Indexof,我想检查像{或$这样的特殊字符是否存在于字符串中。我使用了regexp,但在代码审查期间,我被要求使用indexOf()而不是regex(因为它的代价更高)。我想了解indexOf()是如何用于识别特殊字符的。(我很熟悉,这可以对子字符串进行索引) 如果您只想查找两个不同的特殊字符,则只需使用indexOf($)或indexOf(“}”)。您需要分别指定要查找的每个特殊字符 但是,无法让它在一条语句中找到每个特殊字符的索引:如果您只需要检查问题中的2个字符,答案将是 var found = ph

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


如果您只想查找两个不同的特殊字符,则只需使用indexOf($)或indexOf(“}”)。您需要分别指定要查找的每个特殊字符


但是,无法让它在一条语句中找到每个特殊字符的索引:

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

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

有不止一个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;
    }
}

当存在相互矛盾的信息时,总是很难猜测。代码不寻找特殊字符,而是搜索模式,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来确定字符串中是否存在字符,还是在询问运行时的复杂性?
for( int i = 0; i < photoRoot.length(); ++i ){
    if( "${}".indexOf( photoRoot.charAt(i) ) >= 0 ){
        // one of the special characters is at pos i
    }
}
photoRoot.matches( ".*" + Pattern.quote( specials ) + ".*" );