首页 > 解决方案 > 编写一个需要查看字符串并判断两个字母是否相邻的方法

问题描述

我正在为学校做一个实验室,这些是说明:“编写一个程序来查看一个字符串是否在另一个特定字母旁边包含一个特定字母。”

这是样本数据:

要输入的样本数据:

chicken a b
frog f g
chicken c k
apluscompsci a s
apluscompsci a p
apluscompsci s c
apluscompsci c p

这是示例输出:

false
false
true
false
true
true
false

到目前为止,这是我的代码:

public class AB
{
    public static boolean check( String s, String a, String b)
    {
        int i;
        if(s.indexOf(a) == -1 || s.indexOf(b) == -1)
        {
            return false;
        }
        if(s.indexOf(a) != -1 || s.indexOf(b) != -1)
        {
            for(i = 0; i < s.length() - 1; i++)
            {
                if(s.substring(s.indexOf(a) - 1,s.indexOf(a)).equals(b) ||  s.substring(s.indexOf(a) + 1,s.indexOf(a)).equals(b) || s.substring(s.lastIndexOf(a) - 1,s.indexOf(a)).equals(b) || s.substring(s.lastIndexOf(a) + 1,s.indexOf(a)).equals(b));
                {
                    return true;
                }
            }  
        }
        return false;
    }
}

这是我的跑步者的样子:

public class AplusRunner
{
    public static void main( String args[] )
    {
        System.out.println( AB.check( "chicken", "a", "b" ) );
        //add more cases
        System.out.println( AB.check( "frog", "f", "g" ) );
        System.out.println( AB.check( "chicken", "c", "k" ) );
        System.out.println( AB.check( "apluscompsci", "a", "s" ) );
        System.out.println( AB.check( "apluscompsci", "a", "p" ) );
        System.out.println( AB.check( "apluscompsci", "s", "c" ) );
        System.out.println( AB.check( "apluscompsci", "c", "p" ) );
    }
}

出于某种原因,它一直显示第一个字符串样本是错误的(这应该发生),但是对于第二个字符串样本,字符串索引超出了 -1 的范围,我不知道如何解决这个问题。感谢您的任何帮助!

标签: javastring

解决方案


我觉得您做了不必要的验证检查,您可以将其简化如下。很抱歉没有为参数使用有意义的名称。尝试用你的观点重新实现这一点。

public class AB {
  public static boolean isConsecutive(String s, String a, String b) {
    return s.indexOf(a + b) != -1;
 }

 public static void main(String args[]) {
    System.out.println(AB.isConsecutive("chicken", "a", "b"));
    System.out.println(AB.isConsecutive("frog", "f", "g"));
    System.out.println(AB.isConsecutive("chicken", "c", "k"));
    System.out.println(AB.isConsecutive("apluscompsci", "a", "s"));
    System.out.println(AB.isConsecutive("apluscompsci", "a", "p"));
    System.out.println(AB.isConsecutive("apluscompsci", "s", "c"));
    System.out.println(AB.isConsecutive("apluscompsci", "c", "p"));

 }
}

输出 :

false
false
true
false
true
true
false

推荐阅读