确定string2是否与string1一起出现

时间:2015-11-13 15:11:28

标签: java if-statement for-loop

  

给定两个字符串str1和str2作为输入,确定str2是否与str1一起出现。

示例输入#1

occurs("JavaLadders","Java")

样本输出#1

true

示例输入#2

occurs("Problem Panel","Panes")

样本输出#2

false

MyApproach

在我的函数中,我接受2个Strings.In for循环我检查每个字符位置是否string1中的字符匹配string2.If它不匹配我使p = 0和count = 0.如果它匹配我增加我的count以及pI还检查count是否等于我的第二个字符串的长度。如果是,我移出循环返回true,否则我返回了fall。

public boolean occurs(String str1, String str2)
{
    int l1=str1.length();
    int l2=str2.length();
    int p=0;
    int count=0;
    int j=0;
    for(;j<l1;j++)
    {
        char ch1=str1.charAt(j);
        char ch2=str2.charAt(p);
        if(ch1==ch2)
        {
            p++;
            count++;
        }
        else if(count==l2)
        {
            break;
        }
        else
        {
            p=0;
            count=0;
        }
    }
    if(l2==count)
    return true;
    else
    return false;
}

Parameters                         Actual Output    Expected Output

'Trisect Institute' 'Trisect'      null             true
  

任何人都可以提前指导我做错了。

6 个答案:

答案 0 :(得分:1)

您的else if(count==l2)声明位置错误。在您的代码中,此条件不会在ch1 == ch2时检查。以下内容可以为您提供帮助:

public boolean occurs(String str1, String str2) {
    int l1=str1.length();
    int l2=str2.length();
    int p=0;
    int count=0;
    int j=0;
    for(;j<l1;j++) {
        char ch1=str1.charAt(j);
        char ch2=str2.charAt(p);
        if(ch1==ch2) {
            p++;
            count++;
        } else {
            p=0;
            count=0;
        }
        if(count==l2) {
            break;
        }
    }
    if(l2==count)
        return true;
    else
        return false;
}

答案 1 :(得分:0)

if(str1.contains(str2)){
    //str1 contains str2, do something here
} else {
    //str1 doesn't contain str2, do something different here
}

答案 2 :(得分:0)

您遇到的问题是因为您在 while 语句中包含 return 语句。所以回报并不总是可以到达。

你必须从

中取出这些内容
if (count == str2.length()) {
    return true;
} else {

    return false;
}

答案 3 :(得分:0)

您的代码存在很多问题。但是,我建议使用Java提供的一个内置字符串函数,如String.indexOf()或String.contains()。

  • 如果第一个字符不匹配,则返回true或false。
  • 你的方法中没有返回语句(它不应该编译)
  • 如果它们在相同的范围内,您正在检查char索引范围并递增它们。这没有意义。你想要完成什么?
  • 如果您在开始比较之前进行不区分大小写的匹配,则可以使用String.toLower()
  • 如果第一个字符超出范围且不同,则会完全跳过检查。
  • 没有任何评论可以解释您尝试尝试的内容

我至少会尝试修复其中一些并在循环的每次迭代中打印出结果(或使用调试器)来帮助你。

答案 4 :(得分:0)

如果您不担心从头开始构建功能,请使用String.contains()方法,否则使用KMP或boyre moore文本搜索算法,您也可以尝试使用暴力方法,但效率不高

答案 5 :(得分:-2)

public boolean occurs(String str1, String str2) {
    //write your code here
    int len1=str1.length();
    int len2=str2.length();

    for(int i=0;i<(len1-len2+1);i++)
    {   
        String str="";
        for(int j=i;j<i+len2;j++)
        {
            str=str+str1.charAt(j);
            if(str.equals(str2)) return true;
        }
    }
    return false;
}