2014-10-11 3 views
-1

, пожалуйста, помогите мне, ребята, я хочу знать, как писать код регулярного выражения.написать код регулярного выражения в java

позволяет говорить о том, что файл содержит 3 предложений

[hi Tom how are you.hey Andy its nice to see you.where is your wife Tom.] 

так, когда я искать Tom я хочу, чтобы программа для печати первой и последней фразы, и если я искать Andy программа должна напечатать только второе предложение ,

Я сошел с ума, потому что все, что я сделал, это просто печать Tom или Andy. это мой код:

Pattern p =Pattern.compile("Tom\\w+") 
+4

Что такое определение предложения? – anubhava

+0

ваш шаблон соответствует слову «Том», за которым следует один или несколько символов слова. В ваших примерах предложений нет ни одного из них, у него есть только «Том», за которым следуют не-слова-символы. Возможно, вам это не понравится, потому что оно связано с чтением, но прочитайте http://www.regular-expressions.info, чтобы узнать, как использовать регулярные выражения. Это может быть несколько часов вашей жизни, которые будут окупиться навсегда. –

ответ

0

Если я понять Ваш вопрос правильно, вы хотите, чтобы соответствовать 2 предложения для Tom и 1 для Andy. Вы хотите сделать это:

String line = "hi Tom how are you.hey Andy its nice to see you.where is your wife Tom."; 

String pattern = "[\\w\\s]*Tom[\\w\\s]*[\\.]?"; 

Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(line); 

while (m.find()) { 
    System.out.println("Find: " + m.group(0)); 
} 

Выход:

Find: hi Tom how are you. 
Find: where is your wife Tom. 
0

Если вы начинающий, то попробуйте этот код. Вы можете сделать его более эффективным, проверяя имена нескольких ключей/людей на одной итерации.

public class Tommy { 

    public static void main(String[] args) { 

     String junk = "hi Tom how are you.hey Andy its nice to see you.where is your wife Tom."; 
     System.out.println(junk); 
     String [] rez = extractor(junk, "Tom"); 
     printArray(rez); 

    } 

    public static String[] extractor(String text, String key) { 
     String[] parts = text.split("\\."); 
     String[] rez = new String[parts.length];// Use an arraylist ? 

     for (int i = 0; i < parts.length; i++) { 
      if (parts[i].contains(key)) { 
       rez[i] = parts[i]; 
      } 
     } 

     return rez; 
    } 

    public static void printArray(String[] ar) { 

     for (int i = 0; i < ar.length; i++) { 
      if (ar[i] != null) { 
       System.out.println(ar[i]); 
      } 
     } 

    } 

} 
0

предположить, что каждое предложение заканчивается "." тогда:

public List<String> findMatches(String string, String name) { 
    List<String> result = new ArrayList<String>(); 
    Pattern p = Pattern.compile("[\\w\\s]*" + name + "[\\w\\s]*");  
    for (String s : string.split("\\.")) { 
     Matcher m = p.matcher(s); 
     if(p.matcher(s).matches()) 
      result.add(s); 
    } 
    return result; 
} 


String string = "hi Tom how are you. hey Andy its nice to see you. where is your wife Tom."; 
System.out.println(findMatches(string, "Tom"); 
System.out.println(findMatches(string, "Andy"); 
Смежные вопросы