[英]How to Make Program flow control jump back to a former loop in 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++;
}
}
作為參考, ta
是TextArea
, t1
是TextField
,用戶在其中輸入要查找的單詞。 我在第二個for循環中遇到問題。 我應該在if ()
塊中寫些什么,以便每當c2[i] != c1[start++]
,控件移至第一個for循環,這將再次確定start的值?
創建一種獲取“開始”的方法,然后您可以隨時調用它。
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(),但希望這能貫穿整個思路。
現在設置代碼的方式是不可能的。 要執行您的要求,您需要將當前代碼重構為不同的方法。 更具體地說,您需要將for循環放入其自己的方法中,然后調用這些方法。
因此,您需要為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)
然后在第二個for循環中調用startForLoop(0)
:
if(c2[i] != c1[start++])
{
startForLoop(start+1)
}
這將從中斷的地方繼續for循環。 如果您需要再次運行2nd for循環,則還必須為其創建一個單獨的方法,並將它們基本上都放置在while循環中,直到繼續在2nd for循環中找到所需的結果為止。
也許這段代碼可以幫助您尋找什么。 基本上,它會與要搜索的字符串一起移動,同時要記住要搜索的字符串的索引。
抱歉,但是我已經用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.