是否可以通过仅搜索一部分单词来找到单词?

时间:2019-06-26 23:48:10

标签: java

我需要使用一个包含特定单词的短语,然后即使确实包含该单词,即使该单词是另一个单词的一部分,也要打印出整个单词。

我认为如何找到单词"apple",但我不知道如何找到单词"appletree"

到目前为止,我有一些代码可以找到苹果这个词并将其打印出来。

String phrase = "She's sitting under an appletree!"; 

if (phrase.contains("apple")) {
    System.out.println("apple");
} else { 
    System.out.println("none"); 
}

如何打印"appletree"

3 个答案:

答案 0 :(得分:2)

将正则表达式用于1-liner:

String target = phrase.replaceAll(".*?(\\w*apple\\w*).*", "$1");

这是通过匹配(并替换)整个输入来实现的,但是先捕获目标,然后对捕获的输入使用反向引用($1),导致仅返回目标。

apple的任一端使用\\w*(即,任意数量的单词字符)匹配出现apple的单词。通过使用不愿意量词.*?,将最小数量的前导字符匹配到目标外部,否则该表达式将一直匹配到apple,从而会漏掉{ {1}}。


测试代码:

dapple

输出:

String phrase = "She's sitting under an appletree!";
String target = phrase.replaceAll(".*?(\\w*apple\\w*).*", "$1");
System.out.println(target);

答案 1 :(得分:0)

您可以导入扫描仪以读取该短语。您将使用scanner.next()将输入的每个令牌捕获到字符串变量“ s”(在本例中为每个单词)中,然后使用if语句if(s.contains(“ apple”))然后使用System.out .println(s)。

希望这会有所帮助!

  • 罗宾。

答案 2 :(得分:0)

无需使用正则表达式,您只需将句子拆分成单词,循环浏览并检查其中是否包含所要求的单词-老式风格

String [] arr = phrase.split ("\\s+");
for (String word : arr) {
    if (word.contains("apple")) return word;
}