Java 获取字符串中多个字符串中第一个出现的字符串

Java 获取字符串中多个字符串中第一个出现的字符串,java,string,indexof,Java,String,Indexof,假设我有一个字符串ABCDEFGHIJKLMNOPQRSTUV。我想要一个内部字符串的索引:GHI、JKL或MNO;以先发生者为准。以下是我所拥有的: String Alphabet = "ABCDEFGHIJKLMNOPQRSTUV"; int leastIndex = Alphabet.indexOf("GHI"); if( Alphabet.indexOf("JKL") < leastIndex ) leastIndex = Alphabet.indexOf("JKL"); if(

假设我有一个字符串ABCDEFGHIJKLMNOPQRSTUV。我想要一个内部字符串的索引:GHI、JKL或MNO;以先发生者为准。以下是我所拥有的:

String Alphabet = "ABCDEFGHIJKLMNOPQRSTUV";
int leastIndex = Alphabet.indexOf("GHI");
if( Alphabet.indexOf("JKL") < leastIndex ) leastIndex = Alphabet.indexOf("JKL");
if( Alphabet.indexOf("MNO") < leastIndex ) leastIndex = Alphabet.indexOf("MNO");
return leastIndex;
不太过分的东西,特别是带有更多模式的长字符串。

尝试使用正则表达式

Pattern pattern = Pattern.compile("(GHI|JKL|MNO)");
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println(matcher.start()); // starting index
    System.out.println(matcher.group()); // matched group
}
试一试


alphabet.split(“(GHI | JKL | MNO)”)[0]
@TI,它不提供索引,如果任何字符串不出现,则该索引无效。
Pattern pattern = Pattern.compile("(GHI|JKL|MNO)");
Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println(matcher.start()); // starting index
    System.out.println(matcher.group()); // matched group
}
int leastIndex = Math.min(Alphabet.indexOf("JKL"), Alphabet.indexOf("GHI")), Alphabet.indexOf("MNO"));