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
}