搜索特定行的文本文件
我想在文本文件中搜索特定的文本行。如果我正在寻找的文本位于特定行中,我想进一步阅读该行以获取更多输入。搜索特定行的文本文件
到目前为止,我有3个标签,我正在寻找。
@public @private
@virtual
如果我发现任何这些上线,我想读下一步怎么走这样的例子,我能有这样一行:
@public double getHeight();
如果我确定标签我发现是@public
然后我必须采取以下部分后的空白,直到我到达分号。问题是,我无法真正想到一种有效的方法来做到这一点,而不会过度使用charAt(..)
,这两种方法看起来都不错,但是对于大文件的长期运行或者对于连续的多个文件。
我想帮助解决这个问题,因为我目前无法理解我该怎么做。代码本身用于解析C++文件中的注释,以便稍后生成Header文件。伪代码部分是我卡住的地方。有人建议BufferedReader,其他人说Scanner。我和Scanner一起,因为这似乎是BufferedReader的替代品。
public void run() { Scanner scanner = null;
String filename, path;
StringBuilder puBuilder, prBuilder, viBuilder;
puBuilder = new StringBuilder();
prBuilder = new StringBuilder();
viBuilder = new StringBuilder();
for(File f : files) {
try {
filename = f.getName();
path = f.getCanonicalPath();
scanner = new Scanner(new FileReader(f));
} catch (FileNotFoundException ex) {
System.out.println("FileNotFoundException: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("IOException: " + ex.getMessage());
}
String line;
while((line = scanner.nextLine()) != null) {
/**
* Pseudo Code
* if @public then
* puBuilder.append(line.substring(after white space)
* + line.substring(until and including the semicolon);
*/
}
}
}
回答:
String tag = ""; if(line.startsWith("@public")){
tag = "@public";
}else if{....other tags....}
line = line.substring(tag.length(), line.indexOf(";")).trim();
这给你从标签的端部(在这种情况下是公共的)进入一字符串,然后以分号之前的字符,然后修剪掉两端的空白。
回答:
我可能会误解你..但你只是想找String.contains()
?
if(line.contains("@public")){}
回答:
if (line.startsWith("@public")) { ...
}
回答:
如果您允许使用开源库,我建议使用apache common-io和common-lang库。这些广泛使用的Java库会让你的生活变得更简单。
String text = null; InputStream in = null;
List<String> lines = null;
for(File f : files) {
try{
in = new FileInputStream(f);
lines = IOUtils.readLines(in);
for (String line: lines){
if (line.contains("@public"){
text = StringUtils.substringBetween("@public", ";");
...
}
}
}
catch (Exception e){
...
}
finally{
// alway remember to close the resource
IOUtils.closeQuietly(in);
}
}
以上是 搜索特定行的文本文件 的全部内容, 来源链接: utcz.com/qa/262119.html