String


Stringは


Stringは、基本データ型(=int、float、char、boolean)などの一般的なクラスです.ここでいうように、Stringとは、これらの基本資料型とは異なり、参考資料型のclassという意味です.参照資料型とは、オブジェクト自体が値を持たず、reference(アドレス)値を有し、そのreferenceにオブジェクト値を有する形式をいう.ここではStringを生成する方法やその他の基本的な内容を省略して整理する.基本的な方法はString apiの確認をお勧めします.

String比較


前述したようにStringは参照変数であるため、==で比較すると、新しく作成された2つのオブジェクトのアドレス値が当然異なるためfalseが現れる.これがequal()を使用する理由です.それを覚えて!

Stringオブジェクトの不変フィーチャー


Stringオブジェクトには可変の特徴があります.不変はStringオブジェクトが編集不可であることを意味します.しかし、私たちは今まで.
String str = "new";
str = str+" world";
このようにStringオブジェクトの値を編集すると思います.しかし、これは私たちが編集しているように見えるだけで、実際には既存のStringオブジェクトの参照変数を放棄し、新しい編集Stringオブジェクトの参照変数に置き換えます.Stringオブジェクトを編集し続けると、意味のないオブジェクトが生成され続けます.一度や二度でいいのですが、何度も繰り返し使うのであればメモリ管理の面では考えておくべきです.これらの問題を解決するためにStringBufferクラスがあります

StringBuffer


String classは変更できない不変の特性ですが、StringBuffer classは内部で直接変更できるクラスです.メモリについては、変更されたオブジェクトを頻繁に使用して新しいオブジェクトを作成するStringよりも、メモリ内の一時空間(buffer)を使用するStringBufferクラスの方が望ましい.
StringBuffer classは、文字列の一部を削除または変更したり、特定の場所に追加したりする際に必要な空間であり、作成時に常にメモリから実際の容量よりも16文字長い空間を割り当てます.
StringBufferはString classとは異なり、無差別のオブジェクトを生成せず、直接修正可能な可変特性を有する.したがって、頻繁な修正が必要な場合は、StringBuffer classの方が有利であることを覚えておいてください.

主な方法


Stringは本来よく使われるclassなので整理していませんが、StringBufferは主な方法だけを整理したいと思っています.
  • append(String str) : StringBuffer
  • StringBufferに因子伝達としてstrを追加する.
  • delete(int start, int end) : StringBuffer
  • で渡されたstartとendの間の文字列を削除します.
  • insert(int start, String str) : StringBuffer
  • で渡されたstart位置にstrを挿入します.
  • replace(int start, int end, String str) : StringBuffer
  • で渡されたstartとendの間で、文字列をstrに変換します.
  • capacity() : int
  • は、現在の容量(バッファ長)を返します.
  • setLength(int newLength) : void
  • StringBufferオブジェクトに含まれる文字列の長さをnewLengthに再設定します.
  • toString() : String
  • StringBufferオブジェクトをStringオブジェクトに戻します.
  • SpringTokenizer


    SpringTokenizerクラスは、文字列を分割する機能を提供するクラスです.
    生成者
  • StringTokenizer(String str)
  • によって渡されたstrをデフォルトの区切り文字(スペース、enter、tabなど)に分割してトークン
  • を生成する.
  • StringTokenizer(String str, String delim)
  • で伝達するstrをdelimセパレータに分割し、タグ
  • を生成する.
  • StringTokenizer(String str, String delim, boolean returnDelims)
  • によって伝達するstrをdelimセパレータに分割し、タグ生成時に3番目の戻りタグによってタグ
  • が使用するか否かを決定する.
    方法
  • countTokens() : int
  • tokenリソースの数
  • を返します.
  • hasMoreTokens() : boolean
  • タグ
  • に使用可能なリソースがtrueの場合false
  • nextToken() : String
  • は、
  • トークンリソース
  • を返す.
    このように見ると、私たちが主に使っているsplit方法と何の違いもありません.しかし、明らかに違いがある.コードと見なす
    class StringTokenTest{
        public static void main(String[] args){
            String str = "a,b,c,,,d";
            System.out.println("-----split-----");
            String[] sp = str.split(",");
            for(String s : sp){
                System.out.println(s);
            }
    
            System.out.println("-----stringTokenizer-----");
            StringTokenizer token = new StringTokenizer(str, ",");
            while(token.hasMoreTokens()){
                System.out.println(token.nextToken());
            }
        }
    }
    上のコードを実行

    次の結果を確認できます.この結果,splitは我々が定義した「,」によって文字列を区別し,スペースも文字と見なす.しかしStringTokenizerはスペースのほか、文字があるときだけ文字として扱われる.この2つの中でもStringTokenizerの方が速いです正確な理由はわかりませんが、どちらかというと状況に応じてよく使った方がいいですね.