2014-10-22 103 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

相關問題