微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在另一个字符中寻找某个字符并确定其起点

如何解决在另一个字符中寻找某个字符并确定其起点

我应该创建一个方法来确定一个字符是否出现在另一个字符中。如果不是我想返回 -1 否则我应该返回我们寻找的角色第一次出现时的点(起点)。 我们的例子是:

char [] text1 = {'x','x','H','U','G','O','x'}; 
                char [] text2 = {'x','O'}; 
                
                char [] search = {'H','O'};

这里的目标是在 text1 和 text2 两种情况下接收 2 或 3(无论您是从 0 还是 1 开始计数)。 我有的是:

static int find(char[] text,char[] searchText,int fromPos) {
        if (text == null) return -1;
        if (text.length == 0) return -1;
        int j = 0;
        for (int i = fromPos; i<text.length; i++) {
            if (text[i] == searchText[j]) return i;
            j++;
        } return -1;
}

但它并没有真正起作用,而且我收到了一个 OutofBounds 异常。 int fromPos = 0 顺便说一句

解决方法

我不确定您的要求是否允许这样做,但我可以通过将数组转换为字符串然后使用它的方法为您提供一个简单的解决方案。

static int find(char[] text,char[] searchText,int fromPos) {

    if (searchText == null || text == null || text.length < 1 || searchText.length < 1) {
        return -1;
    }

    String searchString = new String(searchText);
    String textString = new String(text);

    if (!textString.contains(searchString)) {
        return -1;
    }
    
    return textString.indexOf(searchString);
    
}
,

问题是当 j 大于搜索文本的长度时,您不断增加 j,这导致 OutofBounds Exception

您要查找以下所有字符与 searchText 相同的位置。我认为问题在于您试图同时迭代 textsearchText,这导致循环无法按预期进行检查。

static int find(char[] text,int fromPos) {
    if (text == null) return -1;
    if (text.length == 0) return -1;
    for (int i = fromPos; i < text.length - searchText.length; i++) {
        boolean isSame = true;
        for (int j = 0; j < searchText.length; j++){
            isSame = isSame && (text[i + j] == searchText[j]);
        }
        if (isSame){
            return i;
        }
    } return -1;
}

这将遍历文本中的每个字符,位置 i 这将首先是 fromPos 的值,并检查它是否与 searchText[j]、{{1} } 从零开始。

j

相同
isSame = isSame && (text[i + j] == searchText[i]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。