仅使用 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++) {