匹配2个字符串之间相同的单词

时间:2018-03-14 03:15:10

标签: java

我想比较和匹配两个字符串之间的一个单词(字符和长度)。

这就是我所拥有的:

String wordCompare = "eagle:1,3:7;6\nBasils,45673:ewwsk\nlola:flower:1:2:b";
String lolo = scanner.nextLine();

if ( motCompare.toLowerCase().indexOf(lolo.toLowerCase()) != -1 ) {

        System.out.println("Bingo !!!");

    } else {

        System.out.println("not found !!!");

    }

如果我输入eagle:1,3:7;6,则应显示Bingo !!!

如果我输入eagle:1,3,它仍显示Bingo !!!错误,则应显示Not found

如果我输入eagle:1,3:7;6 Basils,45673:ewwskeagle:1,3:7;6\nBasils,45673:ewwsk,则还应显示Not Found。应在\n之间确认键入单词的长度。

如果我输入Basils,45673:ewwsk,则会显示bingo !!!

3 个答案:

答案 0 :(得分:0)

看起来你想要的是完全匹配,单词被换行符分割。考虑到这个假设,我建议将字符串拆分为数组,然后将其加载到HashSet中,如下所示:

boolean search(String wordDictionary, String search){
    String[] options = wordDictionary.split("\n"); 
    HashSet<String> searchSet = new HashSet<String>(Arrays.asList(options));
    return searchSet.contains(search);
}

如果搜索功能返回true,它会找到您正在搜索的任何单词,如果没有,则表示没有。 在代码中安装它看起来像这样:

String wordCompare = "eagle:1,3:7;6\nBasils,45673:ewwsk\nlola:flower:1:2:b";
String lolo = scanner.nextLine();
if(search(wordCompare, lolo))
    System.out.println("Bingo!!!");
else
    System.out.println("Not found.");

(对于记录,使用更清晰的变量名称可能会更好)

答案 1 :(得分:0)

正如@Grey在他的回答中已经提到的那样,因为你的短语之间有换行符(\ n),你可以使用 String.split()方法将字符串拆分成字符串数组然后将该数组的元素与用户提供的内容进行比较。

下面的代码只是另一个例子如何做到这一点。它还允许选择Ignore Letter case:

boolean ignoreCase = false;
String userString = "Basils,45673:ewwsk";
String isInString = "'" + userString + "' Was Not Found !!!";
String wordCompare = "eagle:1,3:7;6\nBasils,45673:ewwsk\nlola:flower:1:2:b";
String[] tmp = wordCompare.split("\n");
for (int i = 0; i < tmp.length; i++) {
    // Ternary used for whether or not to ignore letter case.
    if (!ignoreCase ? tmp[i].trim().equals(userString) : 
                      tmp[i].trim().equalsIgnoreCase(userString)) {
        isInString = "Bingo !!!";
        break;
    }
}
System.out.println(isInString);

答案 2 :(得分:0)

谢谢,

事情是我不允许使用正则表达式或表格。

所以根据你的建议我制作了这段代码:

motCompare.toLowerCase().indexOf(lolo.toLowerCase(), ' ' ) != -1 ||
    motCompare.toLowerCase().lastIndexOf(lolo.toLowerCase(),' ' ) != -1)

作为do while循环的条件。

您能否确认一下是否正确?

谢谢。