我如何检查两个范围或单词之间是否存在一个单词?

时间:2016-11-09 14:16:35

标签: java android search

我想在java中检查一个单词,如" fga"存在于" abc"和" lmp"或不。 对于这个例子,我的单词范围从" fga"开始。 " FGB" " fbc" ..." lmo" " LMP&#34 ;.我不能使用包含或子串因为我必须在它们之间找到这些,比如第一个字是" fga"第二个是" xyz",现在是一个词" lac"介于两者之间,所以我必须从程序上检查它是否位于它们之间。

第一个词是" abc" ,第二个词是" fgh" ,现在如果我的搜索词是"的 DEE "然后返回true。从第一个单词到第二个单词(" abc"" abd"" abe" ..." abz"" aca"& #34; acb" ..." fgg"" fgh")如果我的单词存在,那么它将返回true。我没有一个包含所有这些单词的字符串。我只有2个单词和一个搜索词 现在我想检查我的搜索词是否存在于这些范围内。

我尝试使用循环,但这是一个漫长的过程

{
        char firstLetter = firstWord[0];
        char secondLetter = firstWord[1];
        char thirdLetter = firstWord[2];

        char i = 'a', j = 'a', k = 'a';


        do
        {
            for (i = firstLetter; i <= 'z'; i++)
            {
                for (j = secondLetter; j <= 'z'; j++)
                {
                    for (k = thirdLetter; k <= 'z'; k++)
                    {
                        if (k == secondWord[2])
                        {
                            break;
                        }
                        if (!foundOnPage && text.equalsIgnoreCase("" + i + "" + j + "" + k))
                        {
                            foundOnPage = true;
                            pageNo = WordPageNo;
                            break;
                        }
                    }
                    thirdLetter = 'a';
                    if (j == secondWord[1])
                        break;
                    if (foundOnPage)
                        break;
                }
                secondLetter = 'a';

                if (i == secondWord[0] || foundOnPage)
                    break;
            }
            firstLetter = 'a';
            if (foundOnPage)
                break;
        }
        while ((String.valueOf(i) + String.valueOf(j) + String.valueOf(k)).equalsIgnoreCase(secondWord.toString()) || !foundOnPage);

    }

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点:

String sourceString = "fga fgb fbc... lmo lmp";
String beginWord = "abc";
String endWord =  "lmp";
String keyWord = "fga";
int ixBegin = sourceString.indexOf(beginWord);
int ixEnd = sourceString.indexOf(endWord);
int ixKey = sourceString.indexOf(keyWord);

if (ixKey > ixBegin && ixKey < ixEnd) {
    // do your magic here
}

或者您可以将源字符串拆分为单词并分析&#34; keyWord&#34;的位置。在单词数组中。或做其他事情:有很多方法可以做到这一点......

<强>更新

无论如何你可以&#34;手动&#34;实现indexOf()/pos()/substring()方法或做那样的事情:

String sourceString = "fga fgb fbc... lmo lmp";
String beginWord = "abc";
String endWord =  "lmp";
String keyWord = "fga";
char currSourceChar;
int ixCharBeginWord = 0;
int posBeginWord = -1;
int ixCharEndWord = 0;
int posEndWord = -1;
int ixCharKeyWord = 0;
int posKeyWord = -1;

for (int ixChar = 0; ixChar < sourceString.length(); ixChar++) {
  currSourceChar = sourceString.charAt(ixChar);

  // found pos of "beginWord" 
  if (currSourceChar == beginWord.charAt(ixCharBeginWord)) {
    ixCharBeginWord++;
  } else {
    ixCharBeginWord = 0;
  }

  if (ixCharBeginWord == beginWord.length() && ixChar < sourceString.length()-1 && sourceString.charAt(ixChar+1) == 0x20) {
      posBeginWord = ixChar - beginWord.length();  
  }

  // same way as above found pos of "endWord"

  // found as above  pos of "endWord" 

}

if (posKeyWord > posBeginWord && posKeyWord < posEndWord ) {
    // do your magic here
}

但它没用。

答案 1 :(得分:0)

这是简单的Java解决方案:

String input = "fga fgb fgc"; //Your long string
if(input.contains("fga"))
{
 //When true do that
} else
{
  //Else do that
}