场合
我有一个String数组。 String[] arr = {"name","name2"};
我想要什么?
我想知道java中是否有一个函数可以帮助返回true如果一个句子中有一个或两个单词.Java' s"包含" 方法允许只有字符串而不是数组。
答案 0 :(得分:1)
好的,您可以尝试使用此代码,我已经使用了java.util的StringTokenizer类来解决这个问题。
查看代码:
public class StackOverFlowProblem {
public static void prn(String message){
System.out.println(message);
}
public static void main(String[] args) {
// TODO code application logic here
String [] list = {"Hello","My","Friends","How","Are","You"};
String sentence = "Hey Hello";
if(searchWordinString(sentence, list))
prn("exists");
else
prn("don't exists");
}
public static boolean searchWordinString(String sentence,String[] list){
StringTokenizer test = new StringTokenizer(sentence);
String element ="first iteration";
while(!element.equals("")){
try{
element = test.nextElement().toString();
prn(element);
for(int index=0;index<list.length;index++){
if(element.equals(list[index])){
prn(element+"="+list[index]);
return true;
}
}
}
catch(NoSuchElementException e){
prn("Error: don't exist more words , bye");
element="";
}
}
return false;
}
}
我创建了一个带两个参数的函数,一个是句子,另一个是单词列表。
在函数内部,如果在单词匹配列表中找到任何项目,则该句子的单词将返回true,否则为false
答案 1 :(得分:1)
如果您的句子存储为字符串,则只需遍历数组并使用compare()
检查每个单词:
private static boolean checkForWord(String sentence, String[] words) {
for (int i=0; i<words.length; i++) {
if (sentence.contains(words[i])) {
return true;
}
}
return false; //this statement can only be reached if there is no match
}
如果句子存储为String数组,那么您必须使用嵌套的for
循环遍历两个数组,并使用equalsIgnoreCase()
(或仅equals()
比较单词,如果你想让它区分大小写:)
private static boolean checkForWord(String[] sentence, String[] words) {
for (int x=0; x<sentence.length; x++) {
for (int y=0; y<words.length; y++) {
if (sentence[x].equalsIgnoreCase(words[y])) {
return true;
}
}
}
return false;
}
答案 2 :(得分:0)
您可以将其转换为正则表达式,允许同时搜索两者,但也可以确保您只搜索那些确切的单词,而不是单词中的字符串,例如firstname
,contains()
无法做到。
\b(?:name|name2)\b
作为Java字符串文字,您需要加倍\
:"\\b(?:name|name2)\\b"
如果您的单词列表是动态的,即您有一个任意数组的单词,而不是像这样的硬编码正则表达式,那么记住在构建正则表达式时引用这些单词:
StringJoiner joiner = new StringJoiner("|", "\\b(?:", ")\\b");
for (String word : words)
joiner.add(Pattern.quote(word));
Pattern p = Pattern.compile(joiner.toString());
Matcher m = p.matcher(sentence);
if (m.find()) {
System.out.println("Sentence contained word: " + m.group());
}
您甚至可以通过将if
语句更改为while
循环来继续搜索,以查找此类字词的所有实例。
您还可以将Pattern.CASE_INSENSITIVE
选项添加到compile()
来电,因此它也会与Name
或NAME
匹配。