Java-String、StringBuffer、StringBuilderで一般的に使用されるクラスの1つ

1.文字列の使用

1.1、文字列インスタンス化メソッド

方法1:リテラル定義による(データはメソッド領域の文字列定数プールで宣言される)
方法2:新しい+コンストラクタによる(データがヒープスペースにあるときにアドレス値を保存する)

	 String s1 = "javaEE";
     String s2 = "hadoop";

     String s3 = "javaEEhadoop";
     String s4 = "javaEE" + "hadoop";
     String s5 = s1+ "hadoop";
     String s6 ="javaEE" +s2;
     final  String s7 = "javaEE";//常量
     String s8 = s7 + "hadoop";

     System.out.println(s3 == s8);//在常量池
     System.out.println(s3 == s4);
     System.out.println(s3 == s5);
     System.out.println(s3 == s6);
     System.out.println(s5 == s6);
     

出力結果:true、true、false、false、false

1.2。スプライシングの結論:定数と定数をスプライスした結果は定数プールにあり、定数プールに同じ内容の定数はありません。変数がそこにある限り、結果はヒープにあります。一定のプールで
1.3、文字列:文字列

1.Stringはfinalとして宣言され、継承できません。 ""を使用して、
2.StringがSerializableインターフェースを
実装し、文字列を表すときにシリアル化をサポートすることを示します。Comparableインターフェースを実装します:文字列をサイズで比較できることを示します
3.String internal文字列データを格納するための最後のchar []値を定義
4. 文字列:不変性を表す文字シーケンス:省略形:不変性の
明示:1.文字列を再割り当てする場合、割り当て用のメモリ領域を再割り当てする必要があります。一部の値が割り当てられます
。2。既存の文字列をステッチするときは、メモリ領域の割り当ても再割り当てする必要があります。元の値の割り当ては使用できません
。3。Stringのreplace()を呼び出して、指定した文字列または文字を変更するときメモリ領域の割り当てを再割り当てする必要がある場合。
文字列定数プール> - (新しい区別される)を介して、文字列リテラル方法への割り当ては、プロセスゾーンにおいて、この時間は、文字列を宣言
6.文字列は同じ内容の文字列定数プールが保存されませんです

  String s1 = "abc";//字面量创建方式
       String s2 = "abc";
       s1 = "hello";

       System.out.println(s1 == s2 );

       System.out.println(s1);//hello
       System.out.println(s2);//abc

       System.out.println("****************************");

       String s3 = "abc";
       s3 +="def";
       System.out.println(s3);//abcdef
       System.out.println(s2);//abc  说明s3在拼接之后是,新开辟了一块空间

       System.out.println("*************");

       String s4 = "abc";
       String s5 = s4.replace('a','m');
       System.out.println(s4);//abc
       System.out.println(s5);//mbc
1.4。文字列の設計から他の構造への変換の問題

①文字列とバイトの間の変換[]
エンコーディング:文字列- >バイト[]:文字列のgetBytes()を呼び出す
デコード:バイト[]->文字列:文字列のコンストラクタを呼び出す

注:デコード時に使用される文字セットは、エンコードに使用される文字セットと同じである必要があります。それ以外の場合、文字化けします。

  		String str = "abc123";
        byte[] bytes = str.getBytes();//使用默认的编码集
        System.out.println(Arrays.toString(bytes));


②String とchar [] String-> char [] 間の変換:toCharArray()を呼び出します
char(]-> String:文字列コンストラクターを呼び出します

  		String str1 = "abc123";
        char[] c = str1.toCharArray();
        for (int i = 0; i < c.length; i++) {
            System.out.println(c[i]);
        }

③文字列と基本データ型とパッケージクラスの変換関係

String-->基本数据类型、包装类:调用包装类的静态方法parseXxx(str);
基本数据类型、包装类 --> String:调用重载的方法valueOf(xxx);
1.5、Stringメソッドの使用
(1)charAt(int index) 返回指定索引处的 char 值
 (2)compareTo(String anotherString) 按字典顺序比较两个字符串,
 (3)compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写
 (4)concat(String str) 将指定字符串连接到此字符串的结尾,等价于用"+"
 (5)contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true
 (6)endsWith(String suffix) 测试此字符串是否以指定的后缀结束
 (7)equals(Object anObject) 将此字符串与指定的对象比较
 (8)format(String format, Object args) 使用指定的格式字符串和参数返回一个格式化字符串
 (9)indexOf(int ch) 与 indexOf(int ch, int fromIndex)
 返回在此字符串中第一次出现指定字符处的索引,后者要从指定的索引开始搜索
 (10)indexOf(String str) 与 indexOf(String str, int fromIndex)
 返回指定子字符串在此字符串中第一次出现处的索引,后者要从指定的索引开始搜索
 (11)isEmpty() 当且仅当 length() 为 0 时返回 true
 (12)lastIndexOf(int ch) 与 lastIndexOf(int ch, int fromIndex)
 返回指定字符在此字符串中最后一次出现处的索引,后者要从指定的索引处开始进行反向搜索
 (13)lastIndexOf(String str) 与 lastIndexOf(String str, int fromIndex)
 返回指定子字符串在此字符串中最后一次出现处的索引,后者要从指定的索引开始反向搜索
 (14)length() 返回此字符串的长度
 (15)matches(String regex) 字符串是否匹配给定的正则表达式
 (16)replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
 (17)replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
 (18)replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串
 (19)split(String regex) 根据给定正则表达式的匹配拆分此字符串
 (20)startsWith(String prefix)
 startsWith(String prefix, int toffset)
 测试此字符串是否以指定的前缀开始,后者要从指定的索引开始搜索
 (21)toCharArray() 将此字符串转换为一个新的字符数组
 (22) toLowerCase() 与toLowerCase(Locale locale)
 将此 String 中的所有字符都转换为小写,前者是使用默认环境,后者是使用指定Locale的规则
 (23)toString() 返回此对象本身
 (24)toUpperCase() 与 toUpperCase(Locale locale)
 将此 String 中的所有字符都转换为大写,前者是使用默认环境,后者是使用指定Locale的规则
 (25)trim() 返回字符串的副本,忽略前导空白和尾部空白
 (26)valueOf(int i) 返回 int 参数的字符串表示形式(int 可以换成其他类型)
インタビューの質問:文字列s =新しい文字列( "abc");この方法でオブジェクトを作成すると、メモリ内にオブジェクトがいくつ作成されますか?

回答:2つ。1つはヒープスペースの新しい構造で、もう1つはchar []: "abc"に対応する定数プールのデータです。

文字列の不変性を具体化する
    String str = new String("good");
   char[] ch = {'t','e','s','t'};

   public void chage(String str,char ch[]){
       str ="test ok";
       ch[0] = 'b';
   }

   public static void main(String[] args) {
       StringTest st = new StringTest();
       st.chage(st.str,st.ch);
       System.out.println(st.str);//good;
       System.out.println(st.ch);//best
   }

2. StringBufferとStringBuilderの使用について(どちらも類似していますが、以下はStringBufferによる例です)

2.1。StringとStringBufferおよびStringBuilderの類似点と相違点
  1. 文字列:不変の文字シーケンス、下部は格納にchar []を使用
  2. StringBuffer:可変文字シーケンス。下部では、ストレージ、スレッドセーフ、低効率のためにchar []を使用しています
  3. StringBuilder:可変文字シーケンス、下部は格納にchar []を使用、jdk5.0の新機能、スレッドは安全ではなく、高効率
2.2。ソースコード分析と容量拡張

ソースコード分析

 	String str = new String();//char[] value = new char[0];
    String str1 = new String();//char[] value = new char[]{'a','b','c'};

      StringBuffer sb = new StringBuffer();//char[] value = new char[16];底层创建了一个长度为16的char数组

拡張の問題。

  1. 追加する基になるデータの配列を配置できない場合は、基になる配列を拡張する必要があります。
  2. デフォルトでは、拡張は元の配列の2倍+2であり、元の配列の要素は新しい配列にコピーされます
2.3メソッドの使用

1.追加メソッド

public StringBuffer append(boolean b)

このメソッドの目的は、文字列の接続と同様に、現在のStringBufferオブジェクトの最後にコンテンツを追加することです。このメソッドを呼び出した後、StringBufferオブジェクトの内容も変更されます。

2.挿入方法

public StringBuffer insert(int offset、boolean b)

役割は、StringBufferオブジェクトにコンテンツを挿入し、新しい文字列を形成することです。

3. deleteCharAtメソッド

public StringBuffer deleteCharAt(int index)

このメソッドの機能は、指定された位置にある文字を削除し、残りのコンテンツを新しい文字列に形成することです。

4.逆の方法

public StringBuffer reverse()

役割は、StringBufferオブジェクトの内容を逆にして、新しい文字列を形成することです。

5. trimToSizeメソッド

public void trimToSize()

このメソッドの機能は、StringBufferオブジェクトのストレージスペースを文字列の長さと同じ長さに減らし、スペースの無駄を減らすことです。

6. setCharAtメソッド

public void setCharAt(int index、char ch)

役割は、オブジェクトのインデックス位置にある文字を新しい文字chに変更することです。

public int indexOf(String str)
public int length(String str)
public String subString(int start、int end)左闭右开
public char charAt(int n)

	    //构造函数:可以空参构造,也可以用String、CharSequence来构造
        //public StringBuffer(int capacity)   capacity默认为16,如果用int来构造可以自己设置默认的capacity。
        StringBuffer sbuffer = new StringBuffer("Hello");

        //appen():不需要创建新对象,直接返回append后的StringBuffer对象。
        sbuffer.append(" World !");
        System.out.println(sbuffer);

        //reverse():翻转StringBuffer对象并返回。
        sbuffer.reverse();
        System.out.println(sbuffer);

        //replace():用于替换指定位置的内容,如果start和end相同,效果等同于insert()。
        sbuffer.replace(0, 1, "~");
        sbuffer.reverse();
        System.out.println(sbuffer);

        //insert():在指定位置插入(char、String、int、folat、boolean等)。
        //length():返回StringBuffer的长度。
        sbuffer.insert(sbuffer.length(), " !");
        System.out.println(sbuffer);

        //delete():删除指定位置区间的字符。
        sbuffer.delete(sbuffer.length() - 1, sbuffer.length());
        System.out.println(sbuffer);

Javaの一般的に使用されるクラス2日付時刻クラス

https://blog.csdn.net/weixin_43244120/article/details/105188644

Javaの他のクラスの一般的に使用される3つのクラス(インターフェース)

https://blog.csdn.net/weixin_43244120/article/details/105189069

元の記事を19件公開しました 賞賛されました0 訪問491

おすすめ

転載: blog.csdn.net/weixin_43244120/article/details/105187804