所以我之前已经处理过这个问题,并且认为会有一个可接受的模式来解决问题,但我还没有找到任何东西。我试着四处搜寻,我试着在自己身上修修补补,但没有得到任何令人满意的答案所以我转向SO
String str = "blah1blah2"
我想知道char'1'或'2'是否首先出现(这只是一个明显的例子)。我知道我可以使用str.indexOf()进行1和2的比较,但是这会产生可能返回-1的问题。
让我知道解决这个问题的好方法。
仅供参考:我在Java工作,但我认为这种indexOf函数在其他语言中很常见。
答案 0 :(得分:1)
我会说你应该首先确定你想要的行为。假设您的搜索字词为“1”和“2”,应为以下每个字符串返回什么内容?
用你的答案为每一个编写测试用例。现在让测试通过。简单!
答案 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
}