13

私は現在Javaを学んでおり、膨大な数の行で構成されるファイルをロードしたいというこの問題に直面しました(私はファイルを1行ずつ読んでいます)そして私がしたいことは特定の行をスキップすることです(疑似コード)。

the line thats starts with (specific word such as "ABC")

私は使用しようとしました

if(line.startwith("abc"))

しかし、それはうまくいきませんでした。間違っているかどうかはわかりません。そのため、ロード機能の一部の下で助けを求めています。

public String loadfile(.........){

//here goes the variables 

try {

        File data= new File(dataFile);
        if (data.exists()) {
            br = new BufferedReader(new FileReader(dataFile));
            while ((thisLine = br.readLine()) != null) {                        
                if (thisLine.length() > 0) {
                    tmpLine = thisLine.toString();
                    tmpLine2 = tmpLine.split(......);
                    [...]
4

4 に答える 4

9

試す

if (line.toUpperCase().startsWith(­"ABC")){
    //skip line
} else {
    //do something
}

lineこれは、関数を使用して をすべての大文字に変換しtoUpperCase() 、文字列が で始まるかどうかをチェックしABCます。

もしそうなら、それはtrue何もせず(行をスキップして)そのelse部分に入ります。

Apache CommonsstartsWithIgnoreCaseが提供する機能である which を使用することもできます。2 つの文字列引数を取ります。

public static boolean startsWithIgnoreCase(String str,
                                           String prefix)

この関数はブール値を返します。また、文字列が指定されたプレフィックスで始まるかどうかを確認します。

文字列がプレフィックス で始まる場合は true を返します。大文字と小文字は区別されません。

于 2012-04-04T09:07:49.560 に答える
2

大文字と小文字が重要でない場合はStringUtils.startsWithIgnoreCase(String str, String prefix)Apache Commonsの を使用してみてください

This function return boolean.

ここでjavadocを参照してください

使用法:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){
    //skip line
} else {
    //do something
}
于 2012-04-04T09:17:36.863 に答える
1

入力ファイルが大きい場合、コードはOutOfMemoryError. コードを編集せずにこれに対してできることは何もありません (ファイルが大きくなると、メモリを追加しても失敗します)。

選択した行をメモリに保存してください。ファイルが大きくなった場合 (2GB 程度)、メモリは 4GB になります。( の古い値Stringと新しい値)。

これを解決するには、ストリームを操作する必要があります。

を作成しFileOutpuStream、選択した行をそのストリームに書き込みます。

方法を変更する必要があります。大きな入力の場合、文字列を返すことはできません:

public String loadfile(...){

Streamまたはファイルを返すことができます。

public MyDeletingLineBufferedReader loadFile(...)
于 2012-04-04T09:46:04.030 に答える
0

あなたが使用することができます:

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    String lineString;
    try{
    while((lineString = br.readLine()) != null) {
        if (lineString.toUpperCase().startsWith(­"abc")){
            //skip
            } else {
            //do something
            }
        }
     }

また

static boolean startsWithIgnoreCase(String str, String prefix)以下のようなorg.apache.commons.lang.StringUtilsのメソッド。

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
       String lineString;
        try{
            while((lineString = br.readLine()) != null) {
               if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){
                //skip
                } else {
                //do something
                }
              }
           }
于 2012-04-04T11:09:34.967 に答える