我需要更改一段代码包括:
string.indexOf("bc")
Run Code Online (Sandbox Code Playgroud)
如果前面有字母"a",那么如何通过跳过"bc"出现的solutin来改变这一点.
我不想找到这些:
ABC
但是只有:
命苦
其中x可以是除了(甚至是空的)之外的任何东西.
我想我可以放入一个条件来检查索引i-1 == a,如果是,则再次调用indexOf方法.但我不认为这将导致非常漂亮的代码.
使用正则表达式的解决方案如何?
编辑:看到一些回复后只是一个提示.不仅可以获得正则表达式,而且还可以获得查找索引所需的API调用.
Arn*_*rne 16
根据要求提供更完整的解决方案
/** @return index of pattern in s or -1, if not found */
public static int indexOf(Pattern pattern, String s) {
Matcher matcher = pattern.matcher(s);
return matcher.find() ? matcher.start() : -1;
}
Run Code Online (Sandbox Code Playgroud)
呼叫:
int index = indexOf(Pattern.compile("(?<!a)bc"), "abc xbc");
Run Code Online (Sandbox Code Playgroud)
您可以使用带有负lookbehind的正则表达式:
(?<!a)bc
Run Code Online (Sandbox Code Playgroud)
不幸的是,在 Java 中使用 Regex 进行重现.indexOf仍然是一团糟:
Pattern pattern = Pattern.compile("(?!a)bc");
Matcher matcher = pattern.matcher("abc xbc");
if (matcher.find()) {
return matcher.start();
}
Run Code Online (Sandbox Code Playgroud)