我想检查字符串中是否存在{
或$
这样的特殊字符。我使用了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
}
答案 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 ) + ".*" );
也具有动态适应性。