-1

Android アプリのローカリゼーションを実行中です。このプロセスの問題点の 1 つは、ユーザーへの表示に使用される文字列リテラルとローカル/プログラムで使用される文字列リテラルの違いを区別することです。

public static String PERSON = "Person";
intent.putExtra("isPerson", isPerson);
myTextView.setText("My name is Mark");

テキストが引用符で囲まれているコード行を提供するために使用できる正規表現は何ですか?ただし、1) 変数宣言ではなく、2) 2 行目のような文字列キー/値マッピングでキーとして使用されていません。理想的な目標は、一致の結果が 3 行目の型になる式を持つことです。setText を含む文字列を探すことはできますが、次のようなハードコーディングされた文字列は見逃されます。

String firstName = "Mark";
myTextView.setText(firstName);

引用符で囲まれた空ではないすべての文字列を取得できました。

\"\w{1,}"

これの問題は、広すぎてすべてを提供してしまうことです。さらに、次のようにすると、 putExtra を含まないすべての文字列が返されることが期待されます。

(?<!putExtra).\"\w{1,}"   

ただし、次のような結果が返されるため、これもうまく機能しません。

intent.putExtra("title", "Welcome");

putExtra 部分文字列を含むテキスト行を除外したい場合、「Welcome」は一致として表示されます。

正規表現の達人からの助けをいただければ幸いです。現在、正規表現を有効にして Eclipse のファイル検索機能を使用しています。

4

1 に答える 1

0

あなたは間違った問題を解決しようとしています。あなたのライン

intent.putExtra("title", "Welcome");

リテラル文字列の「タイトル」ではなく、代わりに名前付き定数を使用する必要があります。「タイトル」文字列を少なくとも 2 回 (追加情報を作成するときと、アクティビティの onCreate メソッドで抽出するとき) 必ず使用するため、マジック ナンバーと文字列を避けるために、クリーン コード ルールに従って名前付き定数にする必要があります。

このアプローチに従うと、基本的に、正規表現でキー/値セッターを認識する必要はありません。

于 2012-12-25T07:05:51.577 に答える