文字列
文字列を扱うには、Stringクラスを利用します。ただし、他のクラスと異なり、new演算子によるインスタンス化は必要ありません。以下のように、文字列リテラルをString型の変数に代入するだけで利用できます。
String str = "こんにちは";
new演算子は利用しない
new演算子を利用して、以下のように表すこともできます。
String str = new String("こんにちは");
しかし、これは文字列リテラルでインスタンスがひとつ作成された後、new演算子でもう一度、インスタンスを生成するという意味になり、インスタンスが二重に生成されてしまいます。これは無駄なことなので、Stringオブジェクトをnew演算子で生成してはいけません。
文字列リテラルは、ダブルクォートで括ります(シングルクォートは文字リテラルを表しますので、混同しないようにしてください)。その性質上、リテラルそのものにダブルクォートを含めることはできません。たとえば以下のようなコードはエラーとなります。
String str = "こんにちは、"世界"!!";
上のようなケースでは、エスケープシーケンスを利用して、以下のように表してください。
String str = "こんにちは、"世界"!!";
同じく、文字列リテラルに改行を含めることもできません。代わりに、エスケープシーケンス「n」を利用して表します。
String msg = "あいうえお かきくけこ"; … × String msg = "あいうえお\nかきくけこ"; … ○
Java 13ではテキストブロックが追加され、複数行の文字列リテラルを表現できるようになりました(執筆時点ではPreview版です)。
StrBlock.java
package com.example.mynavi.string; public class StrBlock { public static void main(String[] args) { @SuppressWarnings("preview") String str = """ こんにちは、赤ちゃん! さようなら、赤ちゃん! """; System.out.println(str); } }
▼
こんにちは、赤ちゃん! さようなら、赤ちゃん!
テキストブロックは「”””<改行>~”””」で表します。配下では自由に改行を加えられるので、これまでのように「\n」を利用する必要がなくなります。
なお、テキストブロックの中にインデントがある場合には、もっともインデントの少ない行に合わせて、インデントが除去されます。よって、コードの階層に合わせてテキストブロックをインデントしたとしても、余計なインデントが結果に反映されることはありません。
[Caution]
テキストブロックは、執筆時点でPreviewの扱いです。Eclipseで利用した場合、以下のような警告が表示されます。[プロジェクト・プロパティでプレビュー機能を有効にする]をクリックして、Preview機能を有効化してください。
▲Preview版に対する警告
また、Preview版を利用する場合は、@SuppressWarningsアノテーションでPreviewに対する警告を無効化しておきましょう。