我想在文本文件中搜索特定的文本行。如果我要查找的文本在特定行上,我想在该行上进一步阅读以获得更多输入。
到目前为止,我有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);
*/
}
}
}
答案 0 :(得分:2)
我可能会误解你......但你只是在寻找String.contains()
吗?
if(line.contains("@public")){}
答案 1 :(得分:1)
if (line.startsWith("@public")) {
...
}
答案 2 :(得分:1)
String tag = "";
if(line.startsWith("@public")){
tag = "@public";
}else if{....other tags....}
line = line.substring(tag.length(), line.indexOf(";")).trim();
这将为您提供一个字符串,该字符串从标记的末尾(在本例中为public),然后到分号前面的字符,然后修剪两端的空白。
答案 3 :(得分:0)
如果您允许使用开源库,我建议使用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);
}
}