我需要做一些关键字搜索和打印,如果是真的。 如果我按顺序比较,工作正常。但我想
比较以下情况并期望它们是真实的。
做一些java programming = true
一些java = true
编程= true
最后最重要的是
编程java = true
编程java一些do = true
我需要对上面提到的所有情况都返回true,但到目前为止它只适用于案例1和2
public class Examples {
public static void main(String[] args) {
String[] given = new String[20];
given[0] = ("do some java programming");
given[1] = ("do some grocery shopping");
given[2] = ("play soccer at the west field");
String input = new String();
Scanner userInput = new Scanner(System.in);
System.out.println("Enter the string to compare");
input[0] = userInput.nextLine();
for (int i=0; i <20; i++){
if(given[i].contains(input))
{
System.out.println(given[i]);
}
else
{
//do nothing
}
}
}
}
答案 0 :(得分:1)
解决这个问题的一种方法概述:
given
中的每个字符串都应转换为Set<String>
,它是字符串中所有单词的集合。在每个字符串上使用split()
来获取字词,然后浏览字词列表并将每个字词添加到Set
。
对于每个输入字符串,使用split()
将其拆分为单词,然后创建任何类型的集合(Set<String>
将起作用,但使用{{3}创建List<String>
也有效。
然后,您可以使用given
的{{3}}方法查看输入中的单词集合是否是每个Set
字符串中单词集的子集。
(注意,您必须首先确保输入字符串不是空集。此外,如果输入字符串有多个单词出现,这种方法将无法捕获,没有一些额外的逻辑。)
答案 1 :(得分:0)
拆分给定的行并将其存储在列表中 再次分割输入行并逐字逐句比较 以下是代码段
public class StringCompare
{
public static final String delimiter = " ";
public static void main( String[] args )
{
String[] given = new String[20];
given[ 0 ] = ( "do some java programming" );
given[ 1 ] = ( "do some grocery shopping" );
given[ 2 ] = ( "play soccer at the west field" );
List< List< String >> listLineAsWords = new ArrayList< List< String >>();
//split each line and store it as list.
for ( String line : given )
{
if ( line == null )
break;
listLineAsWords.add( Arrays.asList( line.split( delimiter ) ) );
}
//Write your own logic to get the input line
String inputLine = "programming java";
if ( compareLine( inputLine, listLineAsWords ) )
System.out.println( "The input line is part of given lines" );
}
private static boolean compareLine( String inputLine, List< List< String >> listLineAsWords )
{
if ( inputLine == null )
return false;
List< String > words = Arrays.asList( inputLine.split( delimiter ) );
for ( List< String > listOfWords : listLineAsWords )
{
boolean isPartOfLine = true;
for ( String word : words )
{
if ( !listOfWords.contains( word ) )
{
isPartOfLine = false;
break;
}
}
if(isPartOfLine)
return true;
}
return false;
}
}
&#13;
答案 2 :(得分:0)
对于这个正则表达式将是你的朋友。
这里有一些可以使用的工作代码:
String[] matches = input[0].split(" ");
for (int i=0; i <3; i++){
for(String s: matches){
if(given[i].contains(s))
System.out.println(given[i]);
break;
}
}
}
答案 3 :(得分:0)
您的代码几乎是正确的,但需要进行一些更改
首先,因为在示例代码中您有3
个案例,最好定义您的数组长度3 。
String[] given = new String[3];
注意:对于更多情况,您可以定义更大的数组长度;例如,如果要添加其他2个案例,则数组长度为5
对于所有引用类型,如果阵列长度超过您的需要,则默认值为null。
第二,在if语句中,您要检查输入是否包含给定的数组元素
if (input.contains(given[i])) {
<强>码强>:
String[] given = new String[3];
given[0] = ("do some java programming");
given[1] = ("do some grocery shopping");
given[2] = ("play soccer at the west field");
Scanner userInput = new Scanner(System.in);
System.out.println("Enter the string to compare");
String input = userInput.nextLine();
for (int i = 0; i < given.length; i++) {
if (input.contains(given[i])) {
System.out.println(given[i]);
} else {
// System.out.println("do nothing");
}
}
<强>输出强>:
答案 4 :(得分:-1)
修改如下,假设其他一切都很好
//here initialize 'given' array
//get the user input in a string that is 'input[0]' in your case
int count = 0;
for (String s : given) {
if (s != null && s.matches(input[0])) {
//it matches and print it
} else {
//either it's not a match or the 'given' array has a null at this index
}
count++;
}
我必须说,用字符串获取用户输入。我不明白你为什么在input
数组中拥有它。