找到第一个出现的两个字符

时间:2012-09-09 23:31:42

标签: java string

所以我之前已经处理过这个问题,并且认为会有一个可接受的模式来解决问题,但我还没有找到任何东西。我试着四处搜寻,我试着在自己身上修修补补,但没有得到任何令人满意的答案所以我转向SO

String str = "blah1blah2"

我想知道char'1'或'2'是否首先出现(这只是一个明显的例子)。我知道我可以使用str.indexOf()进行1和2的比较,但是这会产生可能返回-1的问题。

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

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

4 个答案:

答案 0 :(得分:1)

我会说你应该首先确定你想要的行为。假设您的搜索字词为“1”和“2”,应为以下每个字符串返回什么内容?

  • “blah1blah2”
  • “blah2blah1”
  • “blahblah1”
  • “blahblah2”
  • “blahblah”

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

答案 1 :(得分: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,这将首先返回遇到的char或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;
}

答案 2 :(得分: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);

全部取决于您期望的结果

答案 3 :(得分: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
 }