1

任意の句読点を含む任意の文字列を使用して、多くの字句処理を行います。魔法の文字/文字列を使用するか、記号定数を使用するかについては、意見が分かれています。

ほとんどの例は Java ですが、言語に依存しないものとして読む必要があります。

句読点に意味的な役割があり、定数として識別されるべき明確な例があります。

File.separatorない"/""\\"; // OS に依存するので簡単

そして私は書きXML_PREFIX_SEPARATOR = ":"ます。

""ただし、すべての例を空の文字列 ``に置き換える必要があるとしましょう。私は書くことができます:

s = s.replaceAll("\"\"", "");

また

s = s.replaceAll(S_QUOT+S_QUOT, S_EMPTY);

(すべての一般的な句読点を S_FOO (文字列) および C_FOO (文字) として定義しました)

魔法の文字列/文字を支持して:

  1. 短いです
  2. 読むのは当然です(時々)
  3. 名前付き定数はなじみがないかもしれません ( C_APOSvs '\'')

定数に賛成

  1. タイプミスがしにくい (例: との"''" + '"'対比S_APOS+S_APOS + C_QUOT)
  2. エスケープの問題を取り除き"\\s+"ます"\s+""\\\\s+"
  3. 句読点のコードを簡単に検索できます

(これには限界があります - 正規表現の構文はすべてのプログラミングの中で最も認知的に機能不全に陥った部分の 1 つですが、私はこの方法で正規表現を書きません。より良い構文が必要だと思います。)

4

2 に答える 2

1

一般的な文字列処理では、特別な記号は使用しません。スペースは常にスペースになります。読み取り(および書き込み)する方が自然です。

s.replace("String", " ");

よりも:

s.replace("String", S_SPACE);

たとえば、文字列内のスペースと簡単に区別できないため、タブを表すために「\t」などを使用する場合は特に注意が必要です。

XML_PREFIX_SEPARATORまたはのようなものに関してFILE_SEPARATORは、ライブラリを使用して作業を行う必要があるため、おそらくそのような定数を処理する必要はありません。たとえば、:を手書きするのではなく、:(または使用している同等のもの)をdir + FILE_SEPARATOR + filename呼び出す必要があります。file_system_library.join(dir, filename)

このようにして、定数などの答えが得られるだけでなく、実際には、おそらく今は考えていないさまざまなエッジケースの処理が大幅に向上します。

于 2009-11-27T08:26:22.750 に答える
1

時間の経過やインストールごとに定義が変更される可能性がある場合、私はこれらを構成ファイルに入れ、起動時またはオンデマンドで (状況に応じて) 情報を取得する傾向があります。次に、システムに情報を公開するために、プロパティに読み取り専用インターフェイスと明確な名前を持つ静的クラスを提供します。

使用法は次のようになります。

s = s.replaceAll(CharConfig.Quotation + CharConfig.Quotation, CharConfig.EmtpyString);
于 2009-11-27T08:13:53.960 に答える