如果一个字符串是另一个字符串的子字符串,我只需要使用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;
}
}
答案 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个字符后将用完索引。