![](/img/trans.png)
[英]regular expression in java to check that a string is part of another string (NO SUBSTRING)
[英]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.