如何使程序流控制跳回到java中的前循环?

时间:2016-06-23 19:07:54

标签: java

所以我写了一个代码,允许用户在TextArea中找到一个单词。我几乎成功了,但有一件事。在这里,我将向您展示所有代码并告诉我我的问题。

if(ta.getText().length() != 0 && t1.getText().length() != 0)
{
    char c1[] = ta.getText().trim().toCharArray();
    char c2[] = t1.getText().trim().toCharArray();
    for(int i=startFlag;i<c1.length;i++)
    {
        if(c1[i]==c2[0])
        {
            start = i;
            break;
        }
    }

    k=start;
    for(int i=0;i<c2.length;i++)
    {
        if(c2[i] != c1[start++])
        {

        }
        else 
            countFlag++;
    }

    if(countFlag==c2.length)
    {
        ta.select(k,c2.length);
        startFlag++;
    }
}

作为参考,taTextAreat1TextField,用户在其中输入要查找的字词。我在第二个for循环中遇到问题。我应该在if ()块中写什么,以便每当c2[i] != c1[start++]控件转移到第一个for循环时,那将再次确定start的值?

4 个答案:

答案 0 :(得分:1)

创建一个方法以获得“开始”,然后您可以随时调用。

if(ta.getText().length() != 0 && t1.getText().length() != 0)
        {
            char c1[] = ta.getText().trim().toCharArray();
            char c2[] = t1.getText().trim().toCharArray();

            k=getStart(startFlag, c1.length);

            for(int i=0;i<c2.length;i++)
            {
                if(c2[i] != c1[start++])
                {
                    start = getStart(startFlag, c1.length);
                }
                else 
                    countFlag++;
            }

            if(countFlag==c2.length)
            {
                ta.select(k,c2.length);
                startFlag++;
            }

        }

getStart()是:

public int getStart(int startFlag, int length) {
    for(int i=startFlag;i<length;i++)
            {
                if(c1[i]==c2[0])
                {
                    return i;
                }
            }
}

你可能需要getStart()的不同输入,但希望这可以解决一般的想法。

答案 1 :(得分:0)

您的代码现在的设置方式,您所要求的是不可能的。要执行您要求的操作,您需要将当前代码重构为不同的方法。更具体地说,您需要将for循环放入自己的方法中,然后调用这些方法。

答案 2 :(得分:0)

所以你需要做的是为for循环创建一个单独的方法。

public static int startForLoop(int i) {
    for(int i=startFlag;i<c1.length;i++)
    {
       if(c1[i]==c2[0])
       {
          start = i;
          break;
       }
    }
}

然后你可以最初调用startForLoop(0),如果是statment:

,可以在第二个for循环中调用
if(c2[i] != c1[start++])
{
    startForLoop(start+1)
}

这将继续它停止的for循环。如果你需要再次运行第二个for循环,那么你必须为它创建一个单独的方法,并且基本上将它们放在while循环中,直到你在第二个for循环中找到你想要的结果。

答案 3 :(得分:0)

可能是这段代码可以帮助您找到所需内容。 基本上它会随着要搜索的字符串一起移动,同时记住要搜索的字符串的索引。

很抱歉,我已经在java中实现了它,但是这个概念是相同的,返回的结果是我得到的最好的结果。你必须试一试!

private static String searchString(String searchIN,String searchFOR){
        if (searchFOR != "") {
            int index = searchIN.toUpperCase().indexOf(searchFOR.toUpperCase());
            String before = "";
            String highlighted = "";
            String after = "";
            while (index >= 0) {
                int len = searchFOR.length();
                before = searchIN.substring(0, index);
                highlighted = "\"" + searchFOR + "\"";//do what ever you want to do with searched string
                after = searchIN.substring(index + len);
                searchIN = before + highlighted + after;
                index = searchIN.toUpperCase().indexOf(searchFOR.toUpperCase(), index + highlighted.length());
            }
        }
        return searchIN;
    }