java - 在java中编写自定义indexOf()方法

标签 java indexof

我目前正在尝试调试为名为 MyString 的类编写的 indexOf() 方法。相关方法如下:

public int indexOf(int startIndex, char ch) 
{
    if(startIndex < 0 || startIndex >= length())
    {
        System.out.println("\nFATAL ERROR: indexOf() given invalid startIndex\n");
        System.exit(0);
    }
    for(int i = startIndex; i < this.length(); i++)
    {
        if(this.charAt(i) == ch)
        {
            return i;
        }
    }
    return NOT_FOUND;
}


public int indexOf(MyString key)
{   
    if(key.length() > this.length())
    {
        return NOT_FOUND;
    }
    int indexOfFirstKeyLetter = indexOf(0, key.letters[0]);
    while(indexOfFirstKeyLetter != NOT_FOUND)
    {
        if(keyFound(indexOfFirstKeyLetter, key))
        {
            return indexOfFirstKeyLetter;
        }
        else
        {
            indexOfFirstKeyLetter = indexOf(indexOfFirstKeyLetter + 1, key.letters[0]);
        }
    }
    return NOT_FOUND;
}


private boolean keyFound(int indexOfFirstKeyLetter, MyString key) //Note: this method works for most strings, but doesn't work if the end of MyString is identical to the first few letters of key (ex: ado and dog falsely returns as true)
{
    for(int i = indexOfFirstKeyLetter; i < key.length() + indexOfFirstKeyLetter && i < this.length(); i++)
    {
        if(this.letters[i] != key.letters[i - indexOfFirstKeyLetter])
        {
            return false;
        }
    }
    return true;
}

我相信问题出在我的 keyFound 方法上,虽然它适用于大多数字符串,但当正在测试的 MyString 对象的末尾与它所比较的​​键的前几个字母相同时,它将返回 true。例如,在indexOf(MyString other)方法中测试“ado”和“dog”时,它返回值1,表示在this.letters[1]位置找到匹配开头的索引,当它应该返回 NOT_FOUND 或 -1 时,因为完整的 key 字符串“dog”不在“ado”中。有什么方法可以改变我的 keyFound 方法来解决这个问题吗?

最佳答案

发生的情况是您到达字符串末尾并在检查整个比较字符串之前退出:

你的逻辑是:“ado”中是“dog”吗?在 'ado' 中查找第一个匹配 'd' 的索引,它是 1. "d"== "d"。很好,下一个字母,“o”==“o”。下一封信真好。等待。 'ado' 字符串完成。一定是被发现了。返回真。

您的 keyFound 函数需要一个提前退出条件,如果在搜索整个“key”的长度之前它已到达字符串末尾,则返回 false。

请注意,这比实际情况要复杂得多。您可以通过一个循环轻松完成此操作。现在您拥有的所有循环的时间复杂度为 O(n^3)。

关于java - 在java中编写自定义indexOf()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650288/

相关文章:

rust - 如何在Rust中从特定索引开始的子字符串中查找?

java - 如何使用 .indexOf() 在 Java 中分割字符串

javascript - 无法让 indexOf 语句起作用

java - 在 Java 中解析 HTML 数据,包括 &lt 和 &gt 标签?

java - TimerTask start stop 只执行一次

java - XStream 中没有已知类类型的注释

java - 从 ArrayList<CustomObject> 中查找项目索引的更好方法

java - indexOf() - 列表 - Android - 无法正常工作

java - 启动 google app engine java 后端时出现 org.jdom.input.JDOMParseException

java - 如何异步调用多个可观察的调用,同时在这些调用之前和之后同步执行一些计算?