0

テキスト ファイル内の特定のテキスト行を検索したい。探しているテキストが特定の行にある場合は、その行をさらに読み込んでさらに入力したいと思います。

これまでのところ、探しているタグが 3 つあります。

@public
@private
@virtual

行にこれらのいずれかが見つかった場合、次に何が来るかを読みたいので、たとえば次のような行を作成できます。

@public double getHeight();

発見したタグ@publicが 問題は、これを過度に使用することなくこれを行う効率的な方法を実際に考えることはできないということですcharAt(..)。どちらも見栄えはよくありませんが、大きなファイルや連続した複数のファイルの場合、長期的にはおそらく良くありません。

現在、これをどのように行うか理解できないため、これを効率的に解決するのに役立ちたいと思います。コード自体は、C++ ファイル内のコメントを解析し、後でヘッダー ファイルを生成するために使用されます。疑似コードの部分は、私が立ち往生している場所です。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);
             */
        }
    }
}
4

4 に答える 4

1
if (line.startsWith("@public")) {
    ...
}
于 2012-12-19T22:55:39.143 に答える
1
String tag = "";
if(line.startsWith("@public")){
   tag = "@public";
}else if{....other tags....}

line = line.substring(tag.length(), line.indexOf(";")).trim();

これにより、タグの末尾 (この場合は public) からセミコロンの前の文字までの文字列が得られ、末尾の空白が削除されます。

于 2012-12-19T22:58:01.317 に答える
0

オープンソースライブラリの使用を許可されている場合は、apachecommon-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);
    }
}   
于 2012-12-20T00:10:31.157 に答える