我从字符串中删除特定的字符串。首先我通过文件阅读器阅读文本文件,然后我将文件的内容存储到字符串数组中并从字符串数组中删除一些特定的字符串
我的输入文字是:
:VL
15
n
3 c
09:0.023
15th:0.023
1987:0.025
1st:0.025
2:0.013
2.0:0.043
2003:0.056
2005:0.056
Top Terms:
Weight :
props
optional
: Point:
1.0:
15th:0.068
现在我正在阅读此文本并存储到字符串数组中:String [] Result
我的代码:
for(String t1: Result){
Pattern = Pattern.compile("\\b:[0-9]\\b");
matcher = pattern.matcher(t1);
if(matcher.find()){
System.out.println(t1);
}
和输出我得到了:
09:0.023
15th:0.023
1987:0.025
1st:0.025
2:0.013
2.0:0.043
2003:0.056
2005:0.056
Top Terms:
Weight :
15th:0.068
但我不想要这个输出。我的输出应该是这样的:
09:0.023
15th:0.023
1987:0.025
1st:0.025
2:0.013
2.0:0.043
2003:0.056
2005:0.056
15th:0.068
让我了解一下我必须应用正则表达式才能获得此输出。
答案 0 :(得分:1)
我怀疑
2005:0.056
Top Terms:
Weight :
实际上是单行...不知何故。
正则表达式应该(仅)匹配您有一个由单个数字组成的“单词”的行。
我猜你真的知道这件事(你“忘了提起它”)。
如果你想匹配这些:
2005:0.056
15th:0.023
1st:0.023
2nd:0.023
3rd:0.023
但不是这些:
2005:0.056 Top Terms: Weight :
1.0:
然后你需要一个更严格的正则表达式,match()
而不是找到; e.g。
pattern = Pattern.compile(
"\\s*[0-9]+(st|nd|rd|th|(\\.[0-9]+))?:[0-9]+\\.[0-9]+\\s*");
for (String t1: Result) {
matcher = pattern.matcher(t1);
if (matcher.match()) {
System.out.println(t1);
}
}
但是在这一点上,我猜测你的“有效”行的实际标准是什么。
答案 1 :(得分:0)
这可能会对你有所帮助。
BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
String str = null;
while ((str = br.readLine()) != null) {
if((str.contains(":"))){
String[] arr=str.split(":");
if(arr.length==2){
if(Pattern.compile("\\d").matcher(arr[1]).find()){
System.out.println(str);
}
}
}
}
Out put
09:0.023
15th:0.023
1987:0.025
1st:0.025
2:0.013
2.0:0.043
2003:0.056
2005:0.056
15th:0.068
答案 2 :(得分:0)
for(String t1: Result){
Pattern p= Pattern.compile("\\b:[0-9]\\b");
Matcher m= p.matcher(t1);
if(m.find()){
System.out.println(t1);
}
这段代码非常合适!
答案 3 :(得分:0)
我有这个。我在使用正则表达式\\s+
从文件读取后拆分内容之后我将数据存储到String [] Result
和应用相同的代码:
String []result;
String returnValue:
file = new FileReader(filename);
reader = new BufferedReader(file);
String line = "";
while ((line = reader.readLine()) != null) {
returnValue += line + "\n";
}
result = returnValue.split("\\s+");
for(String t1: result){
Pattern = Pattern.compile("\\b:[0-9]\\b");
matcher = pattern.matcher(t1);
if(matcher.find()){
System.out.println(t1);
}
它正如输出那样:
09:0.023
15th:0.023
1987:0.025
1st:0.025
2:0.013
2.0:0.043
2003:0.056
2005:0.056
15th:0.068