[英]Java parse text file and get all words between word and character
我正在尝试编写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;
}
}
}
}
}
}
您可以使用正则表达式解决问题,这是一个简单的解决方案:
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]
首先,您说过您是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/ |
现在,正如您所说,您知道答案了。 您应该得到机器人,真实,保险和面纱。 现在您打开了正确的文件。 您需要告诉您的程序在哪里看。 现在您的代码有点丢失,这就是您要在此处执行的操作。 您想如何处理? 看着它几秒钟,我将扫描每个字符。 如果看到“ /”,请重新开始。 将您输入的每个字符放入字符串中,直到再次看到“ /”为止。 那可能是一个字符串数组。
有几种方法可以在几行中完成此操作,假设您是编程新手,也许您还没有学习过模式等。 所以让我们坚持基本。
接下来,寻找字符“ |”。 您可以将其作为自己的单词存储在数组中。 这将是您换线的指南。
解析完文件后,您将拥有一个一维数组,每个索引处都有一个单词。 那么只需将数组与您的单词进行比较,然后迭代直到看到“ |”即可 在打印它们时。
有更简单的方法,但是我发现这是非常有条理和很好的学习工具。
这就是我使用您的代码开始的意思。
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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.