我正在尝试编写java代码来解析文本文件并获取单词和字符之间的所有单词。
使用下面的文字,我需要在" commercial"之间找到所有单词。和角色" |"。在这种情况下,正确的输出将是机器人,真实,保险和面纱。
/tony/ |
/adam/ /real/ /farce/ |
/boat/ /rds/ /dbb/ /Pilot/ /Registry/ |
/commercial/ /bot/ /real/ /insurance/ /veil/ |
/commerce/ /health/ /insurance/ /yes/ |
/Clalit/ /Health/ |
/congenital/ /anomaly/ |
/Danish/ /beef/ /street/ | /Danish/ /bee/ | /no/
/registry/ |
/car/ | /Danish/ /spot/ |
我是java的新手并尝试编写java代码,但我没有接近它。
public static void parseText() throws FileNotFoundException, IOException {
//String fullDatabaseNameString = "";
String line;
try (
InputStream fis = new FileInputStream("text.txt");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);) {
while ((line = br.readLine()) != null) {
// Do your thing with line
String[] words = line.split(" ");
for (String s : words) {
String wordStripped = s.replace("/", "");
if (wordStripped.equals("Danish")) {
if (wordStripped.equals("|")) {
break;
}
}
}
}
}
}
答案 0 :(得分:1)
首先,你说你是Java新手。你是一般的编程新手吗?我将尝试使用常用工具(如字符串数组,文件解析和字符串比较)来指导您制作自己的解决方案。
你有正确的想法。首先,你应该考虑一下你想做什么。你的任务布局清楚。
获取"商业"之间的所有单词和角色" |"
太棒了!现在我们需要弄清楚如何处理这个问题。我们有这个文件:
/tony/ |
/adam/ /real/ /farce/ |
/boat/ /rds/ /dbb/ /Pilot/ /Registry/ |
/commercial/ /bot/ /real/ /insurance/ /veil/ |
/commerce/ /health/ /insurance/ /yes/ |
/Clalit/ /Health/ |
/congenital/ /anomaly/ |
/Danish/ /beef/ /street/ | /Danish/ /bee/ | /no/
/registry/ |
/car/ | /Danish/ /spot/ |
现在正如你所说,你知道答案。你应该得到机器人,真实,保险和面纱。 现在你把文件打开了。你需要告诉你的程序在哪里看。现在你的代码丢失的地方就是你要在这里做的事情。你想怎么接近这个?看着它几秒钟,我会扫描每个角色。如果你看到" /"开始你的话。把你得到的每个角色都放到一个字符串中,直到你看到" /"再次。这可能是一个字符串数组。
有几种方法你可以在几行中做到这一点,我认为你是编程的新手,也许你还没有学习模式等等。所以我们坚持基本。
接下来,你要寻找角色" |"。您可以将它作为自己的单词存储在数组中。这将是你换线的指南。
完成解析文件后,您将拥有一个一维数组,每个索引都有一个单词。那么只需要将数组与你的单词进行比较,然后迭代直到看到" |"打印时。
有更简单的方法,但我觉得这是一种非常有条理和很好的学习工具。
我的意思是使用您的代码启动。
package so;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
public class Fileparser {
public static void main(String[] args) throws FileNotFoundException, IOException {
parseText();
}
public static void parseText() throws FileNotFoundException, IOException {
// String fullDatabaseNameString = "";
String line;
try (
InputStream fis = new FileInputStream("C:\\Dev\\workspace\\so\\src\\so\\file.txt");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);
) {
while ((line = br.readLine()) != null) {
String[] words = line.split(" ");
for (int i = 0; i < words.length; i++) {
if(words[i].equals("/commercial/")) {
i++;
while(!words[i].equals("|")) {
System.out.print(words[i]);
i++; //Don't forget to check your index to be sure you are never out of bounds! Not done here.
//You can also remove the "/" caracter if needed.
}
}
}
}
}
}
希望它有所帮助! 的输出强>
/bot//real//insurance//veil/
答案 1 :(得分:0)
您可以使用正则表达式来解决您的问题,这是一个简单的解决方案:
String content = new Scanner(new File("file.txt")).useDelimiter("\\Z").next();//<----(1)
Pattern pattern = Pattern.compile( Pattern.quote("commercial")
+ "(.*?)" + Pattern.quote("|"));//<-----(2)
Matcher matcher = pattern.matcher(content);
String[] result;
while (matcher.find()) {
result = matcher.group(1).replaceAll("[^a-zA-Z0-9 ]", "").trim().split("\\s+");//<--(3)
System.out.println(Arrays.toString(result));
}
commercial(.*?)\\|
获取(commercial and |)
\s+
逐字逐句获取,输入结果为:<强>输出强>
[bot, real, insurance, veil]