我是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();
}
}
}
答案 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)
}
请记住将你的模式放在循环中,你应该定义一次并多次使用
答案 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
)。
第三,我建议你用英语编程,这样就不会在代码中混合语言,使其更容易阅读;但那当然取决于你。