Java 如何检查字符数组中是否存在特定的字符序列

Java 如何检查字符数组中是否存在特定的字符序列,java,arrays,Java,Arrays,我有两个字符数组: 充满某个词的人。 例如char[]word={'j','a','v','a'} 第二个是给定大小的,由从“a”到“z”的随机字符填充 我需要计算一个单词在第二个数组中存在的次数。 例如,假设第二个数组是:{'w','j','a','v','a'} 对于给定的示例,函数应该返回1,因为单词“java”在数组中只出现一次 这是我的密码 私有静态int-zad4(){ char[]word={'j','a','v','a'}; char[]arr=新字符[100]; //从a到z

我有两个字符数组: 充满某个词的人。 例如
char[]word={'j','a','v','a'}

第二个是给定大小的,由从“a”到“z”的随机字符填充

我需要计算一个单词在第二个数组中存在的次数。 例如,假设第二个数组是:
{'w','j','a','v','a'}
对于给定的示例,函数应该返回1,因为单词“java”在数组中只出现一次

这是我的密码


私有静态int-zad4(){
char[]word={'j','a','v','a'};
char[]arr=新字符[100];
//从a到z的随机字符
对于(int i=0;i

当我将arr设置为与单词相同时,它返回预期值,但当我将arr设置为
{'j','a','v','a','j','a','v','a'}返回3,但我希望2可以首先迭代arr,如果第一个字符匹配,则开始单词检查

private static int zad4() {
    char[] word = {'j', 'a', 'v', 'a'};
    char[] arr =  new char[100];

    // random characters from a to z
    for (int i = 0; i < arr.length; i++) {
        arr[i] = (char)('a' + Math.random() * ('z' - 'a' + 1));
    }

    int countWord = 0;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i] == word[0]) {
            boolean matches = true;
            for(int j = 0; j < word.length; j ++) {
                matches = word[j] == arr[i + j];
                if(!matches)
                {
                    break;
                }
            }
            if(matches) {
                countWord ++;
                i += word.length - 1;
            }
        }
    }

    return countWord;
}
private static int zad4(){
char[]word={'j','a','v','a'};
char[]arr=新字符[100];
//从a到z的随机字符
对于(int i=0;i
首先,我将生成
word
arr
方法参数。在本地生成它们会使代码很难测试和调试。其次,当您成功到达单词末尾时,可以增加计数。大概

private static int zad4(char[] word, char[] arr) {
    int countWord = 0;
    for (int p = 0; p < arr.length; p++) {
        for (int i = 0; i < word.length && p + i < arr.length; i++) {
            if (word[i] != arr[p + i]) {
                break;
            } else if (i + 1 == word.length) {
                countWord++;
            }
        }
    }
    return countWord;
}
获得(如预期的那样)


将字符数组转换为字符串,然后按照下面的说明:@austinwernli我想这是一个家庭作业,重点是研究算法(公平地说,如果OP能说明这一点就好了)。我需要使用数组,因为这是关于数组的家庭作业问题。当我可以使用字符串时,你应该反转你的循环:首先迭代arr,然后迭代单词;嵌套循环迭代每对
i,j
,其中
i
完全独立于
j
。实际上,您所做的是计算
word
中任意位置的字母与
arr
中任意位置的字母匹配的次数,而不要求
word
中的字母都出现,更不用说它们都连续出现了。试着先用纸和笔的例子来解决这个问题。
System.out.println(zad4("java".toCharArray(), "javajavajava".toCharArray()));
System.out.println(zad4("java".toCharArray(), "javajava".toCharArray()));
System.out.println(zad4("java".toCharArray(), "java".toCharArray()));
System.out.println(zad4("java".toCharArray(), "ja".toCharArray()));
3
2
1
0