0

" "大きな XML ファイルを処理する XML パーサーを構築しています。文字列に,"\n"またはではない char が含まれているかどうかを検出する最速の方法を探しています"\r"。正規表現を使用してみましたが、遅すぎて重いです。私が試した別の方法は、 の ASCII 番号を取得し" ""\n"文字"\r"列のサイズからそれを減らすことでした。それが大きい場合は、少なくとも 1 つの文字があります。この操作も重いです。良いアドバイスをいただければ幸いです。

編集 - 明確化:

XML 解析 + 文字列操作の 1 行で 300 ミリ秒は遅すぎます。

私が実装した2つの方法の例:

レデックスによる:

if (!str.matches(".*\\w.*")
{
  // str that doesn't contains chars
}

ASCII 値を合計すると、次のようになります。

if (numOfWhitespaces + numOfSpecialChars >= str.length()) // +1 for ending /r in
  str
{
    // str that doesn't contains chars
}

最初のソリューション (正規表現) は 200 ミリ秒遅くなります。500 行以上のファイル (各行が個別に処理される) では、これは非常に重要です。

十分に明確であることを願っています。ありがとう!

4

1 に答える 1

4

String をスキャンする最速の方法は、SAX リスナーを使用することです

public void characters(char ch[], int start, int length) throws SAXException {
    for(int i=start, end = start+ length; i < end; i++) {
       if(ch[i] <= ' ') {
          // check if it is a white space
       }
    }
}

SAX 解析またはイベント ドリブン パーサーを使用していない場合、これがパフォーマンスのボトルネックになる可能性があります。

于 2013-01-13T17:50:44.457 に答える