java - 在 Java 中将文本文件表示为单个单元,并匹配文本中的字符串

标签 java string-matching textmatching

如何将文本文件(或 XML 文件)表示为整个字符串,并在其中搜索(或匹配)特定字符串?

我创建了一个 BufferedReader 对象:

BufferedReader input =  new BufferedReader(new FileReader(aFile));

然后我尝试使用 Scanner 类及其选项来指定不同的分隔符,如下所示:

//Scanner scantext = new Scanner(input);
//Scanner scantext = new Scanner(input).useDelimiter("");
Scanner scantext = new Scanner(input).useDelimiter("\n");
while (scantext.hasNext()) {  ... }

像这样使用 Scanner 类我可以逐行或逐字阅读文本,但这对我没有帮助,因为有时在我想要处理的文本中,我有

</review><review>

我想说:如果您在文本中的任何地方找到“<review>”,请对以下下一行(或一段文本)执行某些操作,直到找到“</review>”。问题是 <review></review>位于文本的不同位置,有时会粘在其他文本上(因此作为分隔符的空格对我没有帮助)。

我想我可能会使用 Java 中的正则表达式 API(Pattern 和 Matcher 类),但它们似乎匹配特定的字符串或行,我希望将文本作为一个连续的字符串(至少这个是我从我读到的关于它们的印象)。你能告诉我在这种情况下我应该使用什么结构/方法/类吗?谢谢。

最佳答案

不要尝试用正则表达式解析 XML;它只会导致痛苦。有很多很好 existing XML APIs已经在 J​​ava 中;为什么要重新发明它们?

无论如何,要在文本文件中搜索字符串,您应该:

  1. 将文件作为字符串加载 ( example )
  2. 创建 Pattern搜索
  3. 使用 Matcher遍历任何匹配项

关于java - 在 Java 中将文本文件表示为单个单元,并匹配文本中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/821583/

相关文章:

algorithm - 匹配两个文档之间的差异

regex - 正则表达式识别电子邮件地址难吗?

Java - 获取数组中的元素位置

java - 如何在不使用 readLine() 的情况下检查 EOF?

java - 重新消费未提交偏移量的消息

sql - 如何对 PostgreSQL 中的列的一部分进行分组?

JAVA类转成xml文件

mysql - 将包含数组的 SQL 字段拆分为新表/行

r - 寻找与 R 最佳匹配的字符串

perl - 如何在Perl中匹配两个文档之间的字符串顺序?