如何获取 indexOf 多个分隔符?

How to get indexOf multiple delimiters?

我正在寻找一种优雅的方法来查找一组定界符中的一个的首次出现。

例如,假设我的定界符集由 {";",")","/"}.

组成

如果我的字符串是
"aaa/bbb;ccc)"
我想得到结果 3("/" 的索引,因为它是第一个出现的)。

如果我的字符串是
"aa;bbbb/"
我想得到结果 2(";" 的索引,因为它是第一个出现的)。

等等。

如果String不包含任何分隔符,我想return -1.

我知道我可以先找到每个定界符的索引,然后计算索引的最小值,忽略 -1。这段代码变得非常繁琐。我正在寻找一种更短、更通用的方式。

通过regex,可以这样,

String s =  "aa;bbbb/";
Matcher m = Pattern.compile("[;/)]").matcher(s);   // [;/)] would match a forward slash or semicolon or closing bracket.
if(m.find())                                       // if there is a match found, note that it would find only the first match because we used `if` condition not `while` loop.
{
    System.out.println(m.start());                 // print the index where the match starts.

}
else
{
    System.out.println("-1");                      // else  print -1
}

在分隔符列表中搜索输入字符串中的每个字符。如果找到,则打印索引。 您还可以使用 Set 来存储分隔符

下面的程序会给出结果。这是使用 RegEx 完成的。

  import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FindIndexUsingRegex {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    findMatches("aaa/bbb;ccc\)",";|,|\)|/");
}

public static void findMatches(String source, String regex) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(source);

    while (matcher.find()) {
        System.out.print("First index: " + matcher.start()+"\n");
        System.out.print("Last index: " + matcher.end()+"\n");
        System.out.println("Delimiter: " + matcher.group()+"\n");
        break;
    }
}

}

输出:

   First index: 3
Last index: 4
Delimiter: /