Javaによるプログラミングに関する世界観3C(文字列)です。
Javaでの文字列は、以下のように記述する。
String s_hoge = "ほげほげ";
この、ダブルクォーテーションで囲まれた文字列を記述した時点で、既に「new String()」相当のStringインスタンスが作られている。以下のような記述もできるが、2つのインスタンスが生まれてしまうため、以下のような記述は非効率的で、避けた方が良い。
String s_hoge = new String("ほげほげ");
後日注記:Javaは文字列が参照型であるため、==で文字列を比較することはできない。equals()メソッドを使う必要がある。
StringBufferクラスは、文字列を連結・編集することができるクラス。
Javaの標準のStringは、固定長かつ変更不可能(イミュータブル)だが、これに対してStringBufferは可変長かつ変更可能(ミュータブル)である。
JavaのStringを使っている際に、たくさん「+」で文字列を連結していると、メモリ上に文字列がたくさん作られて速度が遅くなってしまう。このような場合にStringBufferを使う。
また、Java 1.5で追加されたStringBuilderクラスは、StringBufferと同様、文字列を連結・編集することができるクラス。
StringBufferよりもStringBuilder(新しいほう)が処理速度が高速だが、StringBuffer(古いほう)はスレッドセーフであるという違いがある。
Javaの正規表現によるパターンマッチングは、まずPatternクラスのオブジェクトを作り、それを正規表現を指定したcompile()メソッドで「コンパイル」し、その後にmatcher()メソッドで「マッチ」させるなど、少しややこしくて複雑である。
以下はPattern (Java Platform SE 8) - Javadocを参考に執筆しました。
Pattern pat = Pattern.compile("ho*ge"); Matcher mtch = pat.matcher("hooooooooge fuuuuuga"); boolean bl = mtch.matches();
以下のサイトが詳しくて参考になる。
正規表現については正規表現のページを参照のこと。
replaceFirst()メソッドは最初に該当した文字列を置換、replaceAll()メソッドは該当する全ての文字列を置換する。
光を闇に変換するには、
str = "光の戦士"; str.replaceAll("光", "闇");
とする。
似たような操作は、
Pattern.compile("$", Pattern.MULTILINE).matcher("Welcome to my homepage.\nNice to meet you.\n").replaceFirst("<br>"); Pattern.compile("$", Pattern.MULTILINE).matcher("Welcome to my homepage.\nNice to meet you.\n").replaceAll("<br>");
のようにも実現できる。Pattern.MULTILINEを指定することで、$が改行地点にもマッチする。
JavaのStringでとても便利なメソッドとして、split()メソッドが挙げられる。ある正規表現で区切られた文字列を分割することができる。
String orig = "Java:Perl:C:Python:Ruby"; String[] items = orig.split(":"); for (String item : items) { System.out.println(item); }