1

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

String str = "blah1blah2"

我想知道是 char '1' 还是 '2' 首先出现(这显然只是一个虚构的例子)。我知道我可以将 str.indexOf() 用于 1 和 2 进行比较,但这提出了它可能返回 -1 的问题。

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

仅供参考:我正在使用 Java,但我认为这种 indexOf 函数在其他语言中很常见。

4

4 回答 4

1

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

  • “废话1废2”
  • “blah2blah1”
  • “废话1”
  • “废话2”
  • “废话”

用你的答案为每一个写测试用例。现在让测试通过。简单的!

于 2012-09-09T23:37:14.540 回答
1

我不知道您需要多大程度的灵活性,但我会用老式的循环方式来执行此操作String,如下所示:

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都没有找到 s,这将返回它首先遇到的或 0 。char

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

public static char findFirstChar(String str, char ... chars) {
    for (char c1 : str.toCharArray())
        for (char c2 : chars)
            if (c1 == c2)
                return c1;
    return 0;
}
于 2012-09-09T23:39:15.427 回答
0

我不确定还有另一种方法,但在比较之前检查字符是否存在:

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);

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

于 2012-09-09T23:37:38.630 回答
0
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
 }
于 2012-09-09T23:44:26.603 回答