我需要更改一段代码,包括:
string.indexOf("bc")
如果前面跟着字母“a”,跳过“bc”出现的solutin怎么能改变呢。
我不想找到这些:
ABC
但仅限:
XBC
其中x可以是除了(甚至是空)之外的任何东西。
我想我可以放入检查索引i-1 == a的条件,如果是,则再次调用indexOf方法。但我认为这不会产生非常漂亮的代码。
使用正则表达式的解决方案如何?
编辑:看到一些回复后只是一个提示。不仅可以获得正则表达式,而且还可以获得查找索引所需的API调用。
答案 0 :(得分: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;
}
呼叫:
int index = indexOf(Pattern.compile("(?<!a)bc"), "abc xbc");
答案 1 :(得分:3)
您可以使用负lookbehind的正则表达式:
(?<!a)bc
不幸的是,用Java中的Regex重现.indexOf
仍然是一团糟:
Pattern pattern = Pattern.compile("(?!a)bc");
Matcher matcher = pattern.matcher("abc xbc");
if (matcher.find()) {
return matcher.start();
}
答案 2 :(得分:1)
使用regex查找符合条件的String,然后找到该String的索引。
int index = -1;
Pattern p = Pattern.compile("[^Aa]?bc");
Matcher m = p.matcher(string);
if (m.find()) {
index = m.start();
}
像这样的东西。 'string'是您正在搜索的文本,'index'包含找到的字符串的位置。 (如果未找到索引,则为-1。)另请注意,除非设置标记,否则模式区分大小写。
答案 3 :(得分:0)
要添加到Arne的答案 - 如果您还要添加索引:
public static int indexOf(String regex, String s, int index)
{
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
return matcher.find(index) ? matcher.start() : -1;
}
呼叫:
int index = indexOf("(?<!a)bc", "abc xbc", 2);