public static void main(String[] args)
{
String s = "Hello There";
String p = "eo";
int reps = 0;
for (int i=0; i<s.length()-p.length(); i++) //checks all characters in the length of s.length minus the length it's searching for
{
for (int j=0; j<p.length(); j++)
{
if (s.charAt(i+j) == p.charAt(j))
reps++;
}
}
System.out.print(reps);
}
它打印 3 来表示 e 和 o 出现的次数,而它应该打印 4。我认为这是因为它在检查“re”后结束搜索,这意味着它检查了“r”为“e”,“e”代表“o”。这通常可以工作,但搜索到此结束,如果我尝试修复它,就会出现超出范围的错误。
最佳答案
您没有循环整个第一个字符串。
for (int i=0; i<s.length()-p.length(); i++)
应该是
for (int i=0; i<s.length(); i++)
..
String s = "Hello There"; //length is 11
String p = "eo"; // length is 2
如果你循环第一个字符串的所有字符,那没问题,但是你循环 s.length-p.length,那么你正在读取前 11-2 个字符(其中一个找到的是最后一个,在位置长度-1)
if (s.charAt(i+j) == p.charAt(j))
应该是这样
if (s.charAt(i) == p.charAt(j))
您想要比较 s 中 p 的每个字符
如果你正在比较“H”和“eo”,你想将“H”与“e”比较,然后与“o”比较,如果你使用i+j,它将把“H”的指针移动到“e”等等。
关于java - 如何编写该程序以包含字符串的最后一个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106345/