JavaベースのString、StringBuffer、StringBuilderクラス

6785 ワード

説明文字列は一連の文字シーケンスであり、JavaはStringとStringBufferの2つのクラスを提供して文字列をカプセル化し、文字列オブジェクトを操作する一連の方法を提供します.
Stringクラスは可変クラスです.つまり、Stringオブジェクトの曲が作成されると、オブジェクトが破棄されるまで、このオブジェクトに含まれる文字列のシーケンスは変更できません.
StringBufferオブジェクトは、文字列シーケンスが可変な文字列を表し、StringBufferが作成されると、StringBufferが提供するappend、insert、reverse、setCharAt、setLengthなどの方法でこの文字列シーケンスオブジェクトの文字列シーケンスを変更することができます.StringBufferによって最終的に所望の文字列が生成されると、そのtoStringメソッドを呼び出してStringオブジェクトに変換できます.
JDK 1.5には、文字列オブジェクトを表すStringBuilderクラスが追加されました.実際、StringBuilderとStringBufferは基本的に類似しており、2つのクラスのコンストラクタと方法も基本的に同じです.異なる点は、StringBufferはスレッドセキュリティであり、StringBuilderはスレッドセキュリティ機能を実現していないため、パフォーマンスがやや高いことです.したがって、通常、コンテンツが可変な文字列オブジェクトを作成する必要がある場合は、StringBuilderクラスの使用を優先する必要があります.
Stringクラスでは、Stringオブジェクトを作成するために多くのコンストラクタが用意されています.ここでは、次のいくつかの特殊な用途があります.
  • String():0文字列のシーケンスを含むStringオブジェクトを作成します(nullを返すわけではありません).
  • String(byte[]bytes,Charset charset):指定した文字セットを使用して、指定したbyte配列を新しいStringオブジェクトに復号します.
  • String(byte[]bytes,int offset,int length):プラットフォームのデフォルト文字セットを使用して、指定したbyte配列のoffset開始ドラム、長さlengthのサブ配列を新しいStringオブジェクトに復号します.
  • String(byte[]bytes,int offset,int length,String charsetName):指定した文字セットを使用して、指定したbyte配列のoffsetを開始し、lengthの長さのサブ配列を新しいStringオブジェクトに復号します.
  • String(byte[]bytes,String charsetName):指定した文字セットを使用して、指定したbyte配列を新しいStringオブジェクトに復号します.
  • String(char[]values,int offset,int count):指定した文字列配列をoffsetから始まり、countの長さの文字数グループの文字要素を文字列に結合します.
  • String(String original):文字列の直接量に基づいてStringオブジェクトを作成します.つまり、新しく作成されたStringオブジェクトの場合、そのパラメータ文字列のコピーです.
  • String(StringBuffer buffer):StringBufferオブジェクトに基づいて対応するStringオブジェクトを作成します.
  • String(StringBuilder builder):StringBuilderオブジェクトに基づいて対応するStringオブジェクトを作成します.

  • Stringクラスでは、文字列オブジェクトを操作する方法も多数用意されています.次に、これらの一般的な方法について詳しく説明します.
  • char charAt(int index):文字列の指定された位置の文字を取ります.ここで、パラメータindexは文字列の序数を指します.次のコード:
  • String s = new String("abcdefghijklmn");
    System.out.println("s.charAt(5):" + s.charAt(5));
    s.charAt(5):5
  • int compareTo(String anotherString):現在のStringオブジェクトとanotherStringオブジェクトを比較します.2つの文字列の文字列が等しい場合は0を返します.等しくない場合は、2つの文字列の0番目の文字から比較し、1番目の等しくない文字差を返します.もう1つの場合、長い文字列の前の部分はちょうど短い文字列で、それらの長さ差を返します.
  • String s1 = new String("abcdefghijklmn");
    String s2 = new String("abcdefghij");
    String s3 = new String("abcdefghijalmn");
    System.out.println("s1.compareTo(s2): "+s1.compareTo(s2);//     
    System.out.println("s1.compareTo(s3): "+s1.compareTo(s3);//  'k'-'a'  
    s1.compareTo(s2): 4
    s1.compareTo(s3): 10

    後でStringの方法についてはまだたくさんありますが、apiを問い合わせることができます.ここでは余計なことは言わない.
    StringBuilder
    主にStringとStringBuffer、StringBuilderの違いについて説明します.
    Stringクラスは変更できません.Stringインスタンスは生成されると変更されません.たとえば、String str=「java」+「struts」+「spring」;上記のプログラムでは、4つの文字列の直接定数に加えて、「java」と「struts」が生成したjavastrutsをメモリに保存し、「javastruts」と「spring」が生成したjavastrutsspring文字列をstr変数に割り当てます.Stringは可変ではないため、多くの一時変数が追加的に生成され、StringBufferまたはStringBuilderを使用するとこの問題を回避できます.
    StringBuilder、StringBufferには、lengthとcapacityの2つのプロパティがあります.lengthプロパティは、Stringオブジェクトのlengthとは異なり、StringBuilder、StringBufferのlengthは変更可能であり、length()とsetLength(int len)メソッドで文字列シーケンスの長さにアクセスして変更できます.CapacityプロパティはStringBuilderの容量を表し、capacityは通常lengthより大きく、プログラムは通常capacityのプロパティに関心を持たない.次の手順では、StringBuilderクラスの使用方法を示します.
     public class TestStringBuilder {  
        public static void main(String[] args) {  
            StringBuilder sb = new StringBuilder();  
            //      
            sb.append("java");//sb="java";  
            //    
            sb.insert(0, "hello ");//sb="hello java";  
            //    
            sb.replace(5, 6, ",");//sb="hello,java";  
            //    
            sb.delete(5, 6);//sb="hellojava";  
            System.out.println(sb.toString());  
    
            //    
            sb.reverse();//sb="avajolleh";  
    
    
            System.out.println(sb.toString());  
            System.out.println(sb.length());//  9  
            System.out.println(sb.capacity());//  16  
            //  StringBuilder   ,          
            sb.setLength(5);//sb="avajo";  
            System.out.println(sb.toString());  
        }  
    }  

    上のプログラムでは、StringBuilderの基本的な操作を示しています.これらの操作はStringBuilderの文字シーケンスを変更します.これがStringBuilderとStringの最大の違いです.StringBuilderの文字シーケンスは可変です.
    もう1つの違いはStringがequals法とhashCode法をカバーしているが,StringBuilderはこの2つの方法をカバーしていないことである.