問題タブ [string-literals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2718 参照

android - AndroidManifestのインテントフィルターのアクション名に対して文字列参照が機能するべきではありませんか?

元々、私のAndroidManifest.xmlには、カスタムアクション名を介して到達したアクティビティが含まれていました。

このマニフェストstartActivity(new Intent("com.company.project.TestActivity"));で問題なく私の活動を始めました。

しかし、私はこのコーディングスタイルに満足していませんでした。以前、私は、インラインで定義された文字列定数を使用しないように言われました。これは、コードの保守性が低下するためです。そしてそれは本当にポイントです。

そのため、最初にApp.javaクラス(使用したクラス)でapを宣言ublic static final String MY_ACTION = "com.company.project.TestActivity";し、次のようにこの名前付き定数を介してコンポーネントに到達しました。

startActivity(new Intent(App.MY_ACTION));

これははるかに優れているように見えましたが、それでも同じ文字列の2つのインスタンスを維持する必要がありました。http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_nameで読む

...これは、値を含むリソース( "@ [package:] type:name"の形式)またはテーマ属性( "?[package:] [type:] name"の形式)への参照である場合もあります。このタイプの。

したがって、この文字列を1回だけ定義するのは問題ないと思いました。<string name="MY_ACTION">com.company.project.TestActivity</string>私はstrings.xmlを入れて、アプリを変更しました。

そして、すべてはまだ大丈夫でした

...AndroidManifest.xmlを .<action android:name="@string/MY_ACTION" />の代わりに使用するように変更するまで<action android:name="com.company.project.TestActivity" />。私の最大の驚きへのこの変更の後、アプリケーションは実行時に故障し、私の意図したアクティビティが見つからないと不平を言いました。文字列参照が正しく解析されなかった可能性があります。:(

おそらく問題は、R.stringが構成に依存していることです...?しかし、その値がconfigごとに変わる可能性のあるそのような文字列参照を選択するのはそれほど狂気ではありません!そして、developer.android.comは、アクション名で参照を使用しても問題ないと言っていました。私はAPIレベル6、7、エンド8でこの動作を経験しました。これはAndroidシステムの単なるバグですか?それとも私は何かを誤解していますか?

私は完全に困惑しています、助けてください。前もって感謝します。

0 投票する
6 に答える
288 参照

c++ - c ++ char *の配列を適切に事前定義するにはどうすればよいですか?

私はそのようにしています:

しかし、私はそれが非推奨であることに気づきました。より良い方法は何ですか?

0 投票する
4 に答える
20910 参照

c# - パスを自動的にエスケープする方法

のようなパス文字列がありますがc:\user\test\test.jpg、どうすれば作成できc:\\user\\test\\test.jpgますか?

0 投票する
1 に答える
296 参照

django - Django に文字列リテラルを無視させる

更新 2: 問題は Django の問題ではありません。Django に到達する前に、Python は間違いなく文字を削除していました。修正は、文字列を生として定義することです

更新: これは、一見したよりも深い質問であることがわかりました。問題は、python が django に到達する前に文字列リテラルを置き換えていることです。解決策が見つかったら、さらに調査して更新します。

レポート生成用の LaTeX テンプレートを操作するために django を使用していますが、Django が文字列の一部を置き換える方法に関して多くの問題が発生しています。

具体的には、latex コードを含む変数を挿入しようとしたときに 2 つの問題に遭遇しました。

1 つ目は、小なり記号などの HTML 文字を HTML コードに置き換えることでした。これはもちろん、LaTeX インタープリターにとって意味不明なものです。次のように、コンテキストを自動エスケープしないように設定することでこれを修正しました。

ただし、2 番目の問題は、Django が文字列リテラルを対応する文字に置き換えるため、二重のバックスラッシュが \ になり、\b がバックスペースになることです。Django にこれらの文字をそのまま残すにはどうすればよいですか?

使用しても壊れません

django テンプレートで参照するには?

0 投票する
1 に答える
1681 参照

c# - 文字列リテラル認識の問題

シンボルごとに文字列を読み取ることにより、文字列リテラルを認識しようとしています。私のスキャナースケルトンの例:

私の目標、パスカルのような文字列を解析することです

0 投票する
7 に答える
219103 参照

c++ - 文字列リテラルの記号\0はどういう意味ですか?

次のコードを検討してください。

str配列の長さはどれくらいですか、そしてそれはどのくらいの0で終わりますか?

0 投票する
4 に答える
9630 参照

c - C->文字列のsizeofは常に8です

なぜ常に8を返すのですか?

0 投票する
4 に答える
260 参照

c - これらの宣言の技術的な違いは何ですか?

0 投票する
2 に答える
1248 参照

java - 文字列インターンの検索コストとリテラル文字列の宣言

2 つの質問。

  1. リテラル文字列を宣言すると、ヒープの文字列プールに同じ文字列が存在するかどうかを検索します。これもインターン(クラスのメソッドインターンString)ですか?

  2. 私の考えでは、各リテラル文字列宣言にはバイナリ検索などが必要なので、 nがプール内の既存の文字列の数である場合、少なくともlog(n)のコストがかかります。また、プールに多くの文字列がある場合、コストが高くなる可能性があります。(検索コストとメモリのトレードオフでしょうか?) この観点からすると、mant リテラル文字列を宣言するのは危険かもしれません。 この検索コストの重要性と、Java がこのように設計されている理由 (リテラル文字列が宣言されている場合のプールの検索)。

以下は、背景を理解するために参照したものです。


クラスJavaDoc にはjava.lang.String次のように記載 されています。

文字列は定数です。作成後に値を変更することはできません。文字列バッファーは可変文字列をサポートします。String オブジェクトは不変であるため、共有できます。

http://www.janeg.ca/scjp/lang/strLiteral.htmlコメント:

つまり、コンパイラは文字列の元の値が一度作成されると変更できないことを認識しているため、既存のデータを安全に使用し、重複によるメモリの混乱を避けることができます。

0 投票する
2 に答える
368 参照

python - Pythonによる正規表現の特殊文字の問題

xml ファイルに正規表現を適用して、値を見つけて置換します。通常は動作します (「xml パーサーを使用してください」という声が聞こえましたが、その間は使用できません)。ただし、値に特殊文字が含まれていると、すべてが台無しになります。

以下のような xml ファイルがあるとします。

<idle2><value>" " ノードの値を置き換えようとすると、" " ノードの値<idle1><value>が "something\n" になります。ファイルへの書き込みに関しては、xml は次のようになります。

検索と置換の両方で、「r」文字列リテラルを使用します。しかし、うまくいかないようです。問題を解決します。検索と置換のたびに、「\n」を「」に置き換えて\\nから、結果をファイルに書き込みます。しかし、それは効率的な使用方法ではありません。

見えなかったものはありますか?\\nファイルに" " を書き込みたいだけです。これは私がそれを欲しがるほどですか?

編集:これが私の正規表現です:

検索用:

置換の場合:

これは検索用の python コードです。

そしてこれは交換用です