java需要匹配*与任何字符

时间:2014-10-22 07:43:12

标签: java

我是Java的新手,所以饶了我。您可以在下面看到我的代码。它应该做的是从文本文件中读取第3列,如果该列是S ** ei或P *** ei,则返回该行中的第一个单词。但是我的问题是"我如何使*匹配从a到z"?的任何字符。我听说过正则表达式,但尚未与他们合作过。任何帮助将非常感激。感谢。

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();
        }
    }
}

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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)
    }
  • "裨[A-ZA-Z] {3} EI" // 3个字母大或小
  • "裨[A-ZA-Z] {1,3} EI" // 1-3个字母大小
  • "裨[A-ZA-Z] + EI" //至少一个字母
  • "裨[A-ZA-Z] * EI" //零个或多个字母

请记住将你的模式放在循环中,你应该定义一次并多次使用

答案 2 :(得分:0)

使用模式匹配器(例如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);
    }

其次,你的if - 逻辑无法工作,因为你嵌套了第一个if,但两个条件不能同时为真(字符串以{{1}开头} S)。

第三,我建议你用英语编程,这样就不会在代码中混合语言,使其更容易阅读;但那当然取决于你。