問題タブ [java-text-blocks]
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.
java - Java Text Blocks: インデント接頭辞内のタブとスペースの混合
Java 15で導入された(非プレビュー) テキスト ブロック機能。行から共通の空白プレフィックスを削除することにより、コードのインデントを壊さずに複数行の文字列リテラルを定義できます。アルゴリズムはJEP 378で説明されています。
しかし、タブとスペースの組み合わせを使用して行がインデントされている場合、「共通の空白プレフィックス」はどのように正確に定義されていますか?
たとえば、次の場合 (·
はスペース、→
タブ文字を意味します)の場合、文字列値はどうなりますか?
OpenJDK を使用した簡単なテストでは、結果の文字列は次のようになります。
したがって、Javac はスペースやタブを含む空白記号をカウントし、そのカウントを使用するように見えます — スペース (0x20) とタブ (0x09) を同等に扱います。これは予想される動作ですか?
補足: これは純粋に理論的な問題ではありません。スペース/タブが混在するインデントと大きなコードベースを持つプロジェクトにとって実用的に重要です。
java - テキスト ブロックと Println の書式設定、Java: 余分な行を削除する方法
これは絞首刑執行人ゲーム用であり、ロジックはうまく機能します。単語が正しく入力され、絞首刑執行人は単語ごとにますます絞首刑にされます。ただし、出力で以下に示すように、「グラフィックス」はユーザーにとって少し難しいです。
どうしたら平らにできますか?以下の 3 つのボックスは、その作成方法に関連するコードを示しています。
上記のコードは、正しい単語がある場合に ArrayList の progressOnWord を埋めます。progressOnWord は "0000000000" で始まり、単語の文字数と同じ数のゼロが推測に使用されます。推測された場合、正しい文字で埋められます。次に例を示します。
上記の現在の段階の「rh00o00ro0」。次に、これは ASCII に変換されます。文字列が 0 の場合、ASCII ブロック ブランクを ASCIIform (progressOnWord の ASCII 形式) に追加します。たとえば、progressOnWord が rh00o00ro0 の場合、ASCII ブロックは上記のようになります。空白の設定は無差別です。空白の場所は気にせず、すべての 0 を空白に設定するだけです。
このステートメントは差別的であり、文字が正しい場所にあることを確認します.
コードの 2 つのブロックは連続していますが、ここでは解説のために分割しています。では、質問に戻ります。ブロックがそれぞれ新しい行にあるのはなぜですか。また、どのように修正できますか? ArrayList<String>
(以下に要約)からブロックを取得しています:
ArrayList のフォーマットが問題になる可能性はありますか? あなたが持っていたかのように
ArrayList では、次のように出力されますか?
私はそうは思わない。ブロックの追加によるものですか?推測どおり1つずつ追加されますが、それがスタックの原因ですか? それとも、ブロック自体の文字ですか - アルファベットの ArrayList のテキスト ブロックで、それはおそらく\s
?
ダニエルの答えに関する詳細を提供するには、
StringBuilder.append(char c)
使用さArrayList.set(int index, String element)
れています。
コードは次のとおりです。
上記では、0 がプレースホルダーであるため、0 が検出されると、ASCII ブロック ブランクに置き換えられます。
上記のコード は、単語内の各文字を反復するループ内で、アルファベットを反復処理します。たとえば、「rhinoceros」の場合: 進行状況が rh00o00ro0 の場合、r が 0 かどうかをチェックします。いいえ。r が見つかるまで、a、b、c...z を繰り返します。アルファベットで r を見つけると、r が進行中のスポット 0 にあることに注意し、r がアルファベットの 18 番目の文字であることを認識し、ASCII ワードのスポット 0 を ASCII ブロック アルファベットの 18 番目の文字列に設定します。 :
ArrayList.set(int index, String element)
このゲームではキャラクターの位置が重要なため、この方法を使用する必要があります。
対照的にStringBuilder.append(char c)
、ASCII 変換のデモを作成するときに使用されます。ユーザーが「rhinoceros」と入力すると、ユーザーに「グラフィックス」スタイルの味を与えるために、上記の ASCII ブロック スタイルで「rhinoceros」という単語全体が出力されます。コードは次のとおりです。
それは注目に値し、同じ結果StringBuilder.append()
をArrayList.set()
生成します: スタッキング. append()
またはset()
「横向き」への方法はありますか?およびメソッドは、デフォルトで文字を積み重ねますappend()
。ArrayList でテキスト ブロックの書式設定を行う必要set()
があるようです。通常は水平方向がデフォルトですが、R---->H---->I---->N...という結果になるように、水平方向に強制的に追加/設定することはできますか?