所以我写了一个代码,允许用户在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的值?
答案 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:
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;
}