我需要使用一个包含特定单词的短语,然后即使确实包含该单词,即使该单词是另一个单词的一部分,也要打印出整个单词。
我认为如何找到单词"apple"
,但我不知道如何找到单词"appletree"
。
到目前为止,我有一些代码可以找到苹果这个词并将其打印出来。
String phrase = "She's sitting under an appletree!";
if (phrase.contains("apple")) {
System.out.println("apple");
} else {
System.out.println("none");
}
如何打印"appletree"
?
答案 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;
}