Java 如何通过跳过距离的字符匹配进行搜索?

Java 如何通过跳过距离的字符匹配进行搜索?,java,string,search,character,Java,String,Search,Character,正如标题所说,我正在做一个项目,在这个项目中,我正在搜索给定的文本,在这个例子中是《白鲸》,寻找一个关键词。然而,我们试图通过一个跳跃距离(而不是cat,寻找c---a---t)来找到这个词,而不是线性的 我尝试了多种方法,但似乎无法让它实际完成一个跳过距离,使其不起作用,并调用下一个允许的距离(递增1,直到达到预设限制) 以下是当前完成搜索的方法,也许这只是我缺少的一些愚蠢的东西 private int[] search() throws IOException { /*

正如标题所说,我正在做一个项目,在这个项目中,我正在搜索给定的文本,在这个例子中是《白鲸》,寻找一个关键词。然而,我们试图通过一个跳跃距离(而不是cat,寻找c---a---t)来找到这个词,而不是线性的

我尝试了多种方法,但似乎无法让它实际完成一个跳过距离,使其不起作用,并调用下一个允许的距离(递增1,直到达到预设限制)

以下是当前完成搜索的方法,也许这只是我缺少的一些愚蠢的东西

private int[] search()
throws IOException
{
        /*
         tlength is the text file length, 
         plength is the length of the
         pattern word (cat in the original post),
         text[] is a character array of the text file. 
         */

    int i=0, j;
        int match[] = new int[2];
        int skipDist = 2;
        while(skipDist <= 100)
        {
            while(i<=tlength-(plength * skipDist))
            {
                j=plength-1;

                while(j>=0 && pattern[j]==text[i+(j * skipDist)])j--;

                if (j<0)
                   {
                      match[0] = skipDist;
                      match[1] = i;
                      return match;
                   }


                else
                   {
                     i++;

                   }



            }
            skipDist = skipDist + 1;

        }
        System.out.println("There was no match!");
        System.exit(0);
        return match;
    }
private int[]search()
抛出IOException
{
/*

tlength是文本文件的长度, plength是指管道的长度 模式词(原文中的cat), text[]是文本文件的字符数组。 */ int i=0,j; int match[]=新int[2]; int skipDist=2;
while(skipDist我不知道您发布的方法,但您可以使用此方法。我使用了字符串和字符数组:

    public boolean checkString (String s)
{
    char[] check = {'c','a','t'};
    int skipDistance = 2;

    for(int i = 0; i< (s.length() - (skipDistance*(check.length-1))); i++)
    {
        boolean checkValid = true;
        for(int j = 0; j<check.length; j++)
        {
            if(!(s.charAt(i + (j*skipDistance))==check[j]))
            {
                checkValid = false;
            }
        }

        if(checkValid)
            return true;
    }

    return false;
}
公共布尔校验字符串(字符串s)
{
char[]check={c',a',t'};
int skipDistance=2;
对于(int i=0;i<(s.length()-(skipDistance*(check.length-1));i++)
{
布尔checkValid=true;

对于(int j=0;j如果传入
字符串
,则只需一行:

public static String search(String s, int skipDist) {
    return s.replaceAll(".*(c.{2," + skipDist + "}a.{2," + skipDist + "}t)?.*", "$1");
}

如果未找到匹配项,将返回空白。

解释变量TLENGHT、PLENGHT、pattern、text[]。TLENGHT是文本文件长度,PLENGHT是模式字的长度(原文中的cat),text[]是文本文件的字符数组。是否要查找在cat字符之间有0-3个其他字符的c…a…t,还是正好有3个字符?是否要查找字符串或索引?@Bohemian我正在查找从2到最大跳过距离任意位置的c…a…t(在上面的代码中,尝试从2到100任意位置)。一旦找到匹配项,它将返回一个匹配项并停止搜索。“匹配项”它在int数组中返回的是跳过距离和匹配单词的第一个字符位置。如果这不是您要查找的,请告诉我。如果它有效,请接受响应。它是半有效的,但是我的输出依赖于搜索函数返回找到单词的最终跳过距离作为匹配事件中第一个或最后一个字母的字符位置。虽然您的确实在特定的跳过距离处找到它,但我希望它能够在2未找到所选单词的情况下“旋转”到下一个跳过距离
public static String search(String s, int skipDist) {
    return s.replaceAll(".*(c.{2," + skipDist + "}a.{2," + skipDist + "}t)?.*", "$1");
}