当前位置: 首页 > 知识库问答 >
问题:

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

巫马化
2023-03-14

我有两个 char 数组:一个用某个单词填充。例如 char[] word = {'j', 'a', 'v', 'a'};

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

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

这是我的密码


    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 counter = 0;
        int countWord = 0;
        for (int i = 0; i < word.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (word[i] == arr[j]) {

                    counter++;
                    if (counter == word.length) {
                        counter = 0;
                        countWord++;
                    }
                }
            }
        }

        return countWord;
    }

当我将arr设置为与word相同时,它返回预期值,但当我将arr设置为< code>{'j ',' a ',' v ',' a ',' j ',' a ',' v ',' a ' };它返回3,但我期望是2

共有2个答案

应向晨
2023-03-14

可以先迭代您的 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;
}
李利
2023-03-14

首先,我将使用<code>word</code>和<code>arr</code>方法参数。在本地生成它们会使代码很难测试和调试。其次,当您成功到达单词末尾时,可以增加计数。类似于,

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;
}

我用它来测试

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
 类似资料:
  • 编辑:如何让js检查字符串是否包含数组的任何字符串,如var arrayVar=[“bing”,“google”];如果像“google是最好的吗?”这样的字符串,请检查它是否包含数组中的内容。这可能吗?

  • 问题内容: 检查字符串是否仅包含以下字符的最佳和最简便的方法是什么? 我想要像这样的伪代码示例: 请和谢谢:) 问题答案:

  • 如果两个英语单词只包含相同的字母,则它们是相似的。例如,食物和好东西并不相似,但狗和好东西是相似的。(如果A与B相似,则A中的所有字母都包含在B中,B中的所有字母都包含在A中。) 给定一个单词W和一个单词L列表,查找L中与W相似的所有单词。将字数打印到标准输出。 例子: 输入(标准输入): 输出(标准输出): 说明: L中与love相似的词是:velo vole love volvell love

  • 下面是我要做的:我有一些,如果列表包含特定字符串,我想打印一条语句,否则抛出一个异常,但当我尝试以下代码时 它遍历列表,在处,它显然找到“apple”,并立即转到块并抛出异常。我也试过下面的,但这也不起作用。 有没有一个简单的方法来做我想做的事情?

  • 问题内容: 在解析字符串之前,如何检查字符串是否为数字? java 字符串 数字 问题答案: 使用及更高版本:或。 使用Apache Commons Lang 3.4及以下版本:或。 你还可以使用返回true空字符串,并忽略字符串中的内部空格。另一种方法是使用根据Java基本检查数字是否可解析的方法。(链接的javadocs包含每种方法的详细示例。)

  • 在解析字符串之前,如何检查字符串是否为数字?