0

私はこの問題を抱えています:

ファイルからロードされたテキスト "ABCD\r\nEFGHJ" は、Java 正規表現 "EFGH" と一致します。もちろん、Matcher オブジェクトは、一致した文字列の開始位置が 6 であることを示します。Matcher は \r \n を 2 つの位置としてカウントします。

元のテキストを AWT TextArea コンポーネントに配置し、select(6,10) を呼び出して、一致した領域を強調表示します。何だと思いますか...「F」の文字から強調表示され始めます。本来よりも1つ前のポジション...

複数の crlf のペアが一致した領域の前にある場合、強調表示は必要以上に前方に移動します。

誰もが簡単な解決策を持っていますか?

4

3 に答える 3

1

簡単な解決策: テキストからすべての \r を削除します... :-P

行末に一貫性がなく (発生する可能性があります)、それらを変更せずに維持したい場合を除いて、それが聞こえるほど愚かではありません...そして、それはおそらくコンポーネントがとにかく行うことです。

于 2008-10-24T11:20:08.867 に答える
0

これはプロトコルデータであり、\rおよび\n文字には表示や行の区切りとは関係のないセマンティクスがあるため、テキストを混乱させることはできません。入力文字を1つずつ個別に処理し、表示方法に関係なく、表示およびカウントされたものとして処理するコンポーネントが必要です。

于 2008-10-24T12:11:23.667 に答える
0

\r\n が一貫している場合は、正規表現を実行する前に \r を削除してから、次のものに渡す前にそれらを置き換えることができます。または、コピーがうまくいく場合は、コピーを変更します。このようにして、正規表現は AWT が期待するものと一致する方法で位置を見つけます。

于 2008-10-24T14:20:56.213 に答える