0

ASCIIファイルで*CELL_OPENと*CELL_CLOSEを検索しようとしていますが、*はそれ自体です(つまり、演算子ではありません)。

私はこのコードを持っています:

do {
  importstring++; 
  numberline = ImportFiles.importarray.get(importstring);
} while (!numberline.startsWith("*CELL_CLOSE"))

これは、*CELL_OPENの追加メソッド以外は同じです。これを実行すると、*CELL_OPENまたは*CELL_CLOSEが見つかりません。そのため、インデックスの範囲外エラーが発生します。*を文字通りに解釈するには、エスケープが必要ですか?そうだと思います。もしそうなら、それの正しい構文は何ですか?* 動作しません。\*エスケープなしと同じ結果になります。ありがとう。

4

2 に答える 2

6

*を文字通りに解釈するには、エスケープが必要ですか?

いいえ。正規表現を作成するために文字列が使用されていない限り(そして、そうではありませんstartsWith)、"*"文字は特別ではありません。

あなたの問題は他の場所にあります。おそらく、numberline実際には。で始まることはありません*CELL_CLOSE。(おそらく空白がありますか?)実際の問題を理解するための最善の策は、デバッガーを使用してウォークスルーすることです。

于 2012-07-13T13:24:13.497 に答える
1

正規表現ではなく文字列に一致するため、エスケープ文字は必要ありません。問題は次のように思われます:

importstring++; 
numberline = ImportFiles.importarray.get(importstring);

基本的に、importstringは、ImportFiles.importarrayから取得する配列のサイズよりも大きくなります。

私はあなたがの行に別の停止条件が必要だと思います

}while (importstring < ImportFiles.importarray.size && !numberline.startsWith("*CELL_CLOSE"))
于 2012-07-13T13:30:09.440 に答える