我是一名java程序员。我经常使用bash脚本进行文本处理。
grep,sed,awk,tr,wc,find等实用程序以及命令之间的管道提供了如此强大的组合。
然而,bash编程缺乏可移植性,可测试性以及Java中存在的更优雅的编程结构。它还使得集成到我们的其他Java产品中变得更加困难。
我想知道是否有人知道任何可能提供我正在寻找的Java文本处理库。
能够写下来真是太酷了:
Text.createFromFile("blah.txt).grep("-v","ERROR.*").sed("s/ERROR/blah/g").awk("print $1").writeTo("output.txt")
这可能是天上掉馅饼的东西。但是我想我无论如何都要提出这个问题。
答案 0 :(得分:3)
Unix4j实现了一些基本的unix命令,主要集中在文本处理上(支持命令之间的管道):http://www.unix4j.org
示例(Ben的示例,但没有awk,因为目前不支持):
Unix4j.fromStrings("1:here is no error", "2:ERRORS everywhere", "3:another ERROR", "4:nothing").toFile("blah.txt");
Unix4j.fromFile("blah.txt").grep(Grep.Options.v, "ERROR.*").sed("s/ERROR/blah/g").toFile("output.txt");
Unix4j.fromFile("output.txt").toStdOut();
>>>
1:here is no error
4:nothing
注意:
答案 1 :(得分:2)
信不信由你,但我使用嵌入式Ant来完成其中的许多任务。
更新
Ant具有Java api,允许从Java项目调用它。这是嵌入式模式。这是对And Api 1.6.1的引用。分发也应该包括文档。
要使用它,您将创建新的任务对象,设置适当的参数并像在build.xml中那样执行它,但是通过Java Api。比你可以运行你的任务。
像
这样的东西ReplaceRegExp regexp = new ReplaceRegExp();
regexp.setMatch("bla");
regexp.setFile(new File("inputFile"));
regexp.execute();
您可能还需要设置一些其他内容。
不确定它是否解决了您的问题,但Ant有很多代码可以解决问题。只需搜索文档。