检查string是否是另一个java的子串

时间:2016-10-17 22:41:37

标签: java string

如果一个字符串是另一个字符串的子字符串,我只需要使用string的length,substring和charAt方法返回一个布尔值。我已经尝试了许多带有各种错误的代码,最新的是一个超出范围的错误。我想帮助我的程序做我想做的事情。以下是我的最新代码

import java.util.*;
class subset
{   public static void main (String[]param)
{   Scanner sc = new Scanner(System.in);
    System.out.println("Enter a long word");
    String large = sc.nextLine();
    System.out.println("Enter a shorter word");
    String small = sc.nextLine();       
    boolean isSubset = checkSubset(large, small);
    System.out.println(isSubset);       
}

public static boolean checkSubset(String large, String small)
{
    String word= "";
    boolean subset = false;
    if(large.length()<small.length())
    {   subset= false;
    }
    for (int i=0; i<large.length();i++)
    {   for(int j=0; j<small.length();j++)
            {   if((large.charAt(i+j))==(small.charAt(j)))
                {   word= word+small.charAt(j);
                }
            }
    }
    if  (word.equals(small))
        {   subset=true;
        }

    return subset;
}
}

3 个答案:

答案 0 :(得分:1)

我建议你将内部循环移动到自己的方法中。它将使代码更直接。

所以,内部循环将变为:

private static boolean subEquals(String large, int offset, String small) {
    for (int i = 0; i < small.length(); i++)
        if (large.charAt(offset + i) != small.charAt(i))
            return false;
    return true;
}

它会检查small是否等于large中从offset开始的子字符串。

然后,您可以在代码的外部循环中使用该方法。由于完成了测试,因此您无需word

public static boolean checkSubset(String large, String small) {
    for (int i = 0; i <= large.length() - small.length(); i++)
        if (subEquals(large, i, small))
            return true;
    return false;
}

请注意,此处的循环条件为<=,而不是<

代码测试:

System.out.println(checkSubset("The quick brown fox jumps over the lazy dog", "The"));
System.out.println(checkSubset("The quick brown fox jumps over the lazy dog", "brown fox"));
System.out.println(checkSubset("The quick brown fox jumps over the lazy dog", "dog"));
System.out.println(checkSubset("The quick brown fox jumps over the lazy dog", "cat"));

生成此输出:

true
true
true
false

答案 1 :(得分:0)

或许这样的事情?

String myLongSentence = "hello world it is a good day today";
String toFind = "world";

for(int i=0; i<myLongSentence.length()-(toFind.length()-1); i++) {
    System.out.println(myLongSentence.substring(i, (toFind.length()+i)));
}

您的代码太冗长,无法解决此问题。

答案 2 :(得分:0)

没有经过你的逻辑,因为large.charAt(i + j)

,可能会出现运行时错误
{   for(int j=0; j<small.length();j++)
        {   if((large.charAt(i+j))==(small.charAt(j)))

假设你正在比较在结束之前开始的东西,比如大的东西=“ThisIsALongWord”和small =“order”。

内部循环将从“ord”开始继续运行,但是大数组在第3个字符后将用完索引。