如何使用java找到一行中的给定字符串

时间:2014-09-30 09:24:45

标签: java pattern-matching

我想在一行中找到一个给定的sting。为此我编写了代码。我使用Pattern类来查找给定字符串是否在行中是否可用。它是给出行,这些不是给了string.I想要那些有给定字符串的行。请检查我的代码。

代码:

 public class StringMatch {
  public static void main(String args[]) throws FileNotFoundException, IOException{
    String text="dsfhgs the dgfre fh" +
                "hjfgeh fhg hghjr" +
                "fhvhjf the vgh fhjghf" +
                "fbvhjfd  fhvfg fjvhf" +
                "the hfdvhjf vhf  fhdvjfd" +
                "hfvbhd thehjdvhj hdfvhdf";
    String pattern = ".*?\\the\\b.*?";
    String f="C:\\TextFiles\\sample.txt";
    String line;
    BufferedReader br = new BufferedReader(new FileReader(f));
    while(br.readLine()!=null) {
        line=br.readLine();
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(line);
        if (m.find( )) {
            System.out.println("Found value: " + m.group(0) );
            System.out.println("Found value: " + m.group(1) );
            System.out.println("Found value: " + m.group(2) );
        } else {
            System.out.println("NO MATCH");
    }
    }
 }
}

6 个答案:

答案 0 :(得分:0)

您可以按照以下方式尝试:

String test="demo string";
System.out.println(test.indexOf("demo"));

输出

0

注意:indexOf()如果找到字符串,将返回第一个字符的位置,否则返回-1。或者,您也可以使用Regular Expressions来搜索复杂的字符串。

Using Regular Expressions :

    Pattern p = Pattern.compile("[0-9]");
    Matcher m = p.matcher("23asd56");
    while(m.find()){
        System.out.println(m.group());
    }

输出

2
3
5
6

答案 1 :(得分:0)

您必须使用PatternMatcher这样的类:

Pattern p = Pattern.compile(myRegex);
Matcher m = p.matcher(myString);
while(m.find()){
//print m.group();
}

答案 2 :(得分:0)

或者您应该使用String Contains

String test="demo string";
System.out.println(test.contains("demo"));

然后返回true或false

如果您不关心案件,则必须这样做

System.out.println(test.toLowerCase().contains(new String("demo").toLowerCase()));

包含区分大小写

虽然只是一个简单的比较检查,但它不会做任何花哨的正则表达式

修改

String str = new String("demo");
if (test.toLowerCase().contains(str.toLowerCase())) {
    System.out.println(str);
}

答案 3 :(得分:0)

这里的问题是(与大多数其他语言不同)java中,matches()必须匹配整个字符串为true,因此将".*"添加到图案。

因为你的输入中有换行符,你还需要添加(?s)来打开DOTALL标志,这会使点也匹配换行符:

boolean b = Pattern.matches("(?s).*\\b"+searchStr+"\\b.*", line);

答案 4 :(得分:0)

只需使用以下简单的模式!!!!!:

String pattern = ".*?\\the\\b.*?";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      } else {
         System.out.println("NO MATCH");
      }

我希望这会对你有所帮助

答案 5 :(得分:0)

我的回答是否适合您?

public static void main (String [] args){
    String given = "dsfhgs the dgfre fh \n" +
            "hjfgeh fhg hghjr \n" +
            "fhvhjf the vgh fhjghf \n" +
            "fbvhjfd  fhvfg fjvhf \n" +
            "the hfdvhjf vhf  fhdvjfd \n" +
            "hfvbhd thehjdvhj hdfvhdf." ;
    String[] lines = given.split("\n");
    String searchStr = "the";       
     for(String line : lines)
     {

         String[] wordOfLine = line.split(" ");
         boolean match = false;
         for(String word : wordOfLine)
         {
                if (searchStr.equals(word)) 
                {
                    match = true;
                } 
         }

         if(match)
         {
             System.out.println("Found value: " + searchStr);
         }
         else 
         {
             System.out.println("NO MATCH");
         }

    }


}