Java 查找两个字符的第一个匹配项

Java 查找两个字符的第一个匹配项,java,string,Java,String,因此,我以前处理过这个问题,并认为会有一个公认的模式来解决这个问题,但我还没有找到任何东西。我试着四处寻找,也试着在自己周围修修补补,但都没有得到任何令人满意的答案,所以我转向这样做 String str = "blah1blah2" 我想知道字符“1”还是“2”首先出现(显然这只是一个虚构的例子)。我知道我可以使用str.indexOf()对1和2进行比较,但这就出现了它可能返回-1的问题 让我知道解决这个问题的好方法 仅供参考:我在Java中工作,但我认为这种indexOf函数在其他语言中

因此,我以前处理过这个问题,并认为会有一个公认的模式来解决这个问题,但我还没有找到任何东西。我试着四处寻找,也试着在自己周围修修补补,但都没有得到任何令人满意的答案,所以我转向这样做

String str = "blah1blah2"
我想知道字符“1”还是“2”首先出现(显然这只是一个虚构的例子)。我知道我可以使用str.indexOf()对1和2进行比较,但这就出现了它可能返回-1的问题

让我知道解决这个问题的好方法


仅供参考:我在Java中工作,但我认为这种indexOf函数在其他语言中非常常见

我想说,你应该从定义你想要的行为开始。假设您的搜索词是“1”和“2”,那么应该为以下每个字符串返回什么

  • “等等”
  • “胡说八道”
  • “布拉布拉赫”
  • “废话”
  • “布拉布拉赫”

为每一个问题编写测试用例,并给出答案。现在让测试通过。简单

我不确定是否还有其他方法,但在比较之前要检查字符是否存在:

String result;
if (str.indexOf('1') > -1 && str.indexOf('2') > -1 ) {
   str.indexOf('2') > str.indexOf('1') ? result ="1 before 2":result="2 before 1";
}
else {
    result="one of them is not there"
}
System.out.println(result);

这一切都取决于您期望的结果

我不知道您需要多大程度的灵活性,但我只想用一种很好的老式方式来完成这项工作,即在
字符串
中循环,类似这样:

public static char findFirstChar(String str, char c1, char c2) {
    for (char c : str.toCharArray())
        if (c == c1 || c == c2)
            return c;
    return 0;
}
当然,这将返回它首先遇到的
char
,如果在字符串中没有找到
char
s,则返回0

如果要搜索任意数量的字符:

public static char findFirstChar(String str, char ... chars) {
    for (char c1 : str.toCharArray())
        for (char c2 : chars)
            if (c1 == c2)
                return c1;
    return 0;
}
String str=“blah1blah2”
int indexOf1=str.indexOf(1);
int indexOf2=str.indexOf(2);
如果(indexOf1!=-1)
{
如果(indexOf2!=-1)
{
int flag=indexOf1-indexOf2;

if(flag)为什么
indexOf()
返回-1是一个问题?那么您是否总是专门使用2个字符进行测试?能否给出一个示例(跟踪)如果您在Java中使用这个虚构的函数,预期结果会是什么?@DougRamsey,因为如果我要查找两个字符中的第一个字符,那么-1将小于字符串中的任何位置。例如:如果“1”位于位置5,而“2”不在字符串中,我希望得到5作为索引,而不是-1。但是,一个简单的比较将给我一个-1。@hbtest:
if(returnedValue==-1)
但我仍然需要知道哪一个存在,因为这正是我要寻找的。我希望避免循环通过它,但这是唯一没有3个if语句的答案,它们的逻辑很容易搞乱,但我仍然需要知道哪一个存在,因为这就是我要寻找的。
String str = "blah1blah2"
int indexOf1 = str.indexOf(1);
int indexOf2 = str.indexOf(2);

if(indexOf1!=-1)
{
    if(indexOf2!=-1)
    {

    int flag = indexOf1 - indexOf2;

    if(flag<0) // 1 first
    else // 2 first

    }

    else 
        {  // 1 is present, but 2 is not }
}

else
 {
     if(indexOf2!=-1) // 2 is present, but 1 is not
 }