繁体   English   中英

检查字符串是否是另一个java的子字符串

[英]Check if string is substring of another java

如果一个字符串是另一个字符串的子字符串,我只需要使用字符串的长度、子字符串和 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;
}
}

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

所以,内循环将变成这样:

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等于从offset开始的large的子字符串。

然后,您可以在代码的外循环中使用该方法。 既然这样就完成了测试,你就不需要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

也许是这样的?

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)));
}

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

不经过你的逻辑,运行时错误是可能的,因为 large.charAt(i+j)

{   for(int j=0; j<small.length();j++)
        {   if((large.charAt(i+j))==(small.charAt(j)))

假设您正在比较在结束之前开始的内容,例如 large = "ThisIsALongWord" 和 small = "order"。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM