我正在尝试编写一个Java类来查找文本文件中的()包围的单词,并将该单词及其出现位置输出到不同的行中。
我怎么用Java写这个?
输入文件
School (AAA) to (AAA) 10/22/2011 ssss(ffs)
(ffs) 7368 House 8/22/2011(h76yu) come 789 (AAA)
Car (h76yu) to (h76yu) extract9998790
2/3/2015 (AAA)
输出文件
(AAA) 4
(ffs) 2
(h76yu) 3
这是我到目前为止所得到的......
public class FindTextOccurances {
public static void main(String[] args) throws IOException {
int sum=0
String line = value.toString();
for (String word : line.split("(\\W+")) {
if (word.charAt(0) == '(‘ ) {
if (word.length() > 0) {
sum +=line.get();
}
context.write(new Text(word), new IntWritable(sum));
}
}
}
答案 0 :(得分:1)
您可以在括号之间找到文本而不分割或使用正则表达式(假设所有括号都已关闭,并且您没有嵌套括号):
int lastBracket = -1;
while (true) {
int start = line.indexOf('(', lastBracket + 1);
if (start == -1) {
break;
}
int end = line.indexOf(')', start + 1);
System.out.println(line.substring(start + 1, end - 1);
lastBracket = start;
}
答案 1 :(得分:0)
如果你拆分“(\ W +)”,你将保留所有不在括号之间的东西(因为你在分括括号的单词上)。
你想要的是一个匹配器:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
Map<String, Int> occurrences = new HashMap<>();
Matcher m = Pattern.compile("(\\W+)").matcher(myString);
while (m.find()) {
String matched = m.group();
String word =matched.substring(1, matched.length()-1); //remove parenthesis
occurrences.put(word, occurences.getOrDefault(word, 0)+1);
}
答案 2 :(得分:0)
这可能有助于我用正则表达式做到这一点我没有声明变量根据你的需要调整它们。我希望这可以解决你的问题
BufferedReader fr = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ASCII"));
while(true)
{
String line = fr.readLine();
if(line==null)
break;
String[] words = line.split(" ");//those are your words
}
for(int i = 0;i<=words.length();i++)
{
String a = words[i];
if(a.matches("[(a-z)]+"))
{
j=i;
while(j<=words.length();)
{
count++;
}
System.out.println(a+" "+count);
}
}