仅使用 charAt 实现子串检查方法
Implementing substring checking method using only charAt
我正在尝试仅使用字符串的 charAt 方法来实现子字符串方法 class
当我在搜索词中包含最后一个字符时出现问题 'hat.' 否则一切正常。
此外,在搜索 'hat' 的示例时,我看到 charAt(j) 跟踪打印所有 'h',所有字符的索引为 0 并且真实出现。
这是完整的代码:
public class SubString {
public static void main(String[] args) {
String line = "The cat in the hat.";
String item = "hat.";
System.out.println("'" + item + "' is substring of '" + line + "' : " + isSubString(item, line));
}
private static boolean isSubString(String item, String line) {
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < line.length() - item.length(); i++) {
for (j = 0; j < item.length(); j++) {
if (item.charAt(j) != line.charAt(i + j)) {
break;
}
if (item.charAt(j) == line.charAt(i + j)) {
System.out.println(item.charAt(j) + ":" + j + " - " + line.charAt(i + j) + ":" + (i + j));
count++;
}
if (count == item.length())
return true;
}
}
return false;
}
}
搜索 'hat.' < == 最后一个带点的单词时再次出现问题。
和 'hat' 虽然 return 为真但跟踪显示错误字符(仅比较 h)并且索引始终为 0.
你应该试试
line.contains(item)
第一个循环省略了字符串的最后一个字符。即 line.length() - item.length()
请将其替换为以下循环条件。
for (i = 0; i < line.length() - item.length() + 1; i++) {
我正在尝试仅使用字符串的 charAt 方法来实现子字符串方法 class
当我在搜索词中包含最后一个字符时出现问题 'hat.' 否则一切正常。
此外,在搜索 'hat' 的示例时,我看到 charAt(j) 跟踪打印所有 'h',所有字符的索引为 0 并且真实出现。
这是完整的代码:
public class SubString {
public static void main(String[] args) {
String line = "The cat in the hat.";
String item = "hat.";
System.out.println("'" + item + "' is substring of '" + line + "' : " + isSubString(item, line));
}
private static boolean isSubString(String item, String line) {
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < line.length() - item.length(); i++) {
for (j = 0; j < item.length(); j++) {
if (item.charAt(j) != line.charAt(i + j)) {
break;
}
if (item.charAt(j) == line.charAt(i + j)) {
System.out.println(item.charAt(j) + ":" + j + " - " + line.charAt(i + j) + ":" + (i + j));
count++;
}
if (count == item.length())
return true;
}
}
return false;
}
}
搜索 'hat.' < == 最后一个带点的单词时再次出现问题。
和 'hat' 虽然 return 为真但跟踪显示错误字符(仅比较 h)并且索引始终为 0.
你应该试试
line.contains(item)
第一个循环省略了字符串的最后一个字符。即 line.length() - item.length()
请将其替换为以下循环条件。
for (i = 0; i < line.length() - item.length() + 1; i++) {