如何在字符串中搜索关键字

时间:2014-10-13 16:55:36

标签: java search compare contains matcher

我需要做一些关键字搜索和打印,如果是真的。 如果我按顺序比较,工作正常。但我想

比较以下情况并期望它们是真实的。

做一些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
        }
        }
    }
}

5 个答案:

答案 0 :(得分:1)

解决这个问题的一种方法概述:

given中的每个字符串都应转换为Set<String>,它是字符串中所有单词的集合。在每个字符串上使用split()来获取字词,然后浏览字词列表并将每个字词添加到Set

对于每个输入字符串,使用split()将其拆分为单词,然后创建任何类型的集合(Set<String>将起作用,但使用{{3}创建List<String>也有效。

然后,您可以使用given的{​​{3}}方法查看输入中的单词集合是否是每个Set字符串中单词集的子集。

(注意,您必须首先确保输入字符串不是空集。此外,如果输入字符串有多个单词出现,这种方法将无法捕获,没有一些额外的逻辑。)

答案 1 :(得分:0)

拆分给定的行并将其存储在列表中 再次分割输入行并逐字逐句比较 以下是代码段

&#13;
&#13;
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;
&#13;
&#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。

read more about it here

第二,在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");
        }
    }

<强>输出

enter image description here

答案 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数组中拥有它。