2014-10-22 83 views
1

我是Java的新手,所以请不吝赐教。在下面你可以看到我的代码。它应该做的是从文本文件中读取第3列,如果该列是S ** ei或P *** ei,它将返回该行中的第一个单词。然而,我的问题是“我怎样才能让*匹配任何字符从一个到Z”?我听说过正则表达式,但还没有真正与他们合作。任何帮助将非常感激。谢谢。java需要匹配*与任何字符

package test; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

public class moja { 
    public static void main(String[] args) { 
     try { 
      File file = new File("SloveneLexicon.txt"); 
      FileReader fileReader = new FileReader(file); 
      BufferedReader bufferedReader = new BufferedReader(fileReader); 
      StringBuffer stringBuffer = new StringBuffer(); 
      String vrstica; 
      while ((vrstica = bufferedReader.readLine()) != null) { 

       String s = vrstica; 
       String[] dobi_besedo_v_vrstici = s.split("\\s+"); 
       String prva_beseda = dobi_besedo_v_vrstici[0]; 
       String tretja_beseda = dobi_besedo_v_vrstici[2]; 
       if (tretja_beseda =="S**ei"){ 
        System.out.println(prva_beseda); 
        if (tretja_beseda =="P***ei") 
         System.out.println(prva_beseda); 
       } 

      } 
      bufferedReader.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

请阅读[如何比较Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java)(提示'等于'而不是' ==') – reto 2014-10-22 07:44:38

+0

'tretja_beseda ==“S ** ei”':___( – Maroun 2014-10-22 07:44:46

+1

)为什么地狱这是封闭的重复?它不是关于字符串比较,而是关于正则表达式匹配字符串 – Pimgd 2014-10-22 07:46:18

回答

1
Pattern p = Pattern.compile("Pi[a-zA-z]{3}ei"); 
    if(p.matcher(input).matches()){ 
     This will work for 3 any letters (big or small) 
    } 
  • “Pi [a-zA-z] {3} ei”// 3个字母大或小
  • “Pi [a-zA-z] {1,3} ei”// 1-3个字母大或小
  • “批[A-ZA-Z] + EI” //至少一个字母
  • “批[A-ZA-Z] * EI” //零个或多个字母

刚记得把你的Pattern放在while循环外面,你应该定义它并且使用很多次

+0

感谢它的工作 – 2014-10-22 08:03:25

+1

很高兴我可以帮助:)祝你好运提高你的技能:) – Beri 2014-10-22 08:04:00

1

看看正则表达式模式匹配:

手册:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

实施例:

Pattern p = Pattern.compile("a*b"); 
Matcher m = p.matcher("aaaaab"); 
boolean b = m.matches(); 
+0

原来的问题陈述似乎是“我如何配合*匹配来自-z的任何字符”,所以他们的“S ** ei”将会与'S [az] {2} ei“'匹配。 – 2014-10-22 07:52:32

0

使用模式匹配器(例如, G。 String.matches()):

if (tretja_beseda.matches("S[a-zA-Z][a-zA-Z]ei")) { 
     System.out.println(prva_beseda); 
    } 
    if (tretja_beseda == "P[a-zA-Z][a-zA-Z]ei") { 
     System.out.println(prva_beseda); 
    } 

[a-zA-Z]从A-Z(不区分大小写)任何字符匹配。我正在阅读代码中的SloveneLexicon.txt,所以我想你还必须处理斯洛文尼亚字符(如Č)。我建议你使用\\p{L}(匹配一个Unicode的字母),而不是[a-zA-Z]

if (tretja_beseda.matches("S\\p{L}\\p{L}ei")) { 
     System.out.println(prva_beseda); 
    } 

其次,因为你嵌套在第一内侧第二ifif编辑逻辑不能工作,但两个条件不能同时为真(字符串以SP开头)。第三,我建议你用英文编程,这样你就不会在你的代码中混合使用语言,这使得它更易于阅读;但这当然取决于你。

+0

č不是一个问题,因为在treja_beseda – 2014-10-22 08:04:55

+0

没有č,š,ž,如果我同时都是真的,我在阅读1行,只有P ** ei或S *** ei可以在每行中加一次 – 2014-10-22 08:07:19

+1

第二个if语句只在​​第一个if语句为真时才被评估。你的代码:'if(cond1){code1();如果(cond2){code2; }}。比较这个:'if(cond1){code1(); } if(cond2){code2(); }' – steffen 2014-10-22 08:12:16

相关问题