java需要匹配*与任何字符
我是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();
}
}
}
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循环外面,你应该定义它并且使用很多次
感谢它的工作 – 2014-10-22 08:03:25
很高兴我可以帮助:)祝你好运提高你的技能:) – Beri 2014-10-22 08:04:00
看看正则表达式模式匹配:
手册: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();
原来的问题陈述似乎是“我如何配合*匹配来自-z的任何字符”,所以他们的“S ** ei”将会与'S [az] {2} ei“'匹配。 – 2014-10-22 07:52:32
使用模式匹配器(例如, 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);
}
其次,因为你嵌套在第一内侧第二if
您if
编辑逻辑不能工作,但两个条件不能同时为真(字符串以S
和P
开头)。第三,我建议你用英文编程,这样你就不会在你的代码中混合使用语言,这使得它更易于阅读;但这当然取决于你。
č不是一个问题,因为在treja_beseda – 2014-10-22 08:04:55
没有č,š,ž,如果我同时都是真的,我在阅读1行,只有P ** ei或S *** ei可以在每行中加一次 – 2014-10-22 08:07:19
第二个if语句只在第一个if语句为真时才被评估。你的代码:'if(cond1){code1();如果(cond2){code2; }}。比较这个:'if(cond1){code1(); } if(cond2){code2(); }' – steffen 2014-10-22 08:12:16
请阅读[如何比较Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java)(提示'等于'而不是' ==') – reto 2014-10-22 07:44:38
'tretja_beseda ==“S ** ei”':___( – Maroun 2014-10-22 07:44:46
)为什么地狱这是封闭的重复?它不是关于字符串比较,而是关于正则表达式匹配字符串 – Pimgd 2014-10-22 07:46:18