1. オブジェクトを作成する
Java プログラムの直接文字列定数の場合、JVM は文字列プールを使用してそれらを保存します。文字列直接定数が初めて使用されるとき、JVM はそれを文字列プールに入れてキャッシュします。通常の状況では、文字列プール内の文字列オブジェクトはガベージ コレクションされません。プログラムで文字列を再度使用する必要がある場合、新しい文字列を再作成することなく、参照変数は文字列内の既存の文字列を直接指すことができます。新しい操作を使用して作成された文字列オブジェクトは文字列プール内のオブジェクトを指しませんが、 intern() メソッドを使用して文字列プール内のオブジェクトを指すことができます。
public class StringDemo1 { public static void main(String[] args){ String str1 ="abc"; String str2 ="abc"; String str3 =new String("abc"); System.out.println(str1==str2);//true System.out.println(str1==str3);//false } }
FAQ
String str3 =new String("abc");
オブジェクトはいくつ作成されますか?
答え: 2 つの
String str ="ab"+"cd";
によって作成されたオブジェクトは何個ありますか?
答え: 1 つ。 「ab」と「cd」は文字列プールに配置される定数です。したがって、abcd 文字列プールが 1 つだけ作成され、文字列 abcd が文字列プールに保存されます。
public class StringDemo1 { public static void main(String[] args){ String str1 ="ab"; String str2 ="cd"; String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//false System.out.println(str3==str5);//false } }
上記のコードからわかるように、テキストを含む引用符で作成された String オブジェクトのみを文字列プールに追加できます。新しいメソッドによって作成された新しいオブジェクトを含む "+" 接続式の場合、それらによって生成された新しいオブジェクトは追加されます。文字列プールには追加されません。
しかし、注意が必要な状況があります:
public class StringDemo1 { private final static String str1 ="ab"; private final static String str2 ="cd"; public static void main(String[] args){ String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//true System.out.println(str3==str5);//true } }
これはなぜでしょうか?その理由は、定数の場合です。その値は固定されているため、コンパイル時に決定できます。
上記のコードを少し変更して、何が起こるかを確認してください。
public class StringDemo1 { private final static String str1 ; private final static String str2; static{ str1="ab"; str2="cd"; } public static void main(String[] args){ String str3 ="ab"+"cd";//创建对象并加入字符串池 String str4 =str1+str2; String str5 =str1+"cd"; System.out.println(str3==str4);//false System.out.println(str3==str5);//false } }
str1とstr2は定数として定義されていますが、sの値が計算される前にすぐに値が代入され、いつ代入されるか、どのような値が代入されるかは変数なので性質は変数と同じです。実行時にのみ作成できます。
2. Stringメソッド
取得メソッド
•int length()
•char charAt(intindex)は位置に基づいて文字を取得します
•intindexOf(int ch)は文字列内のchを返します 位置
•intindexOf(int ch,int fromIndex) fromIndexで指定された位置から開始して、文字列内の最初に出現するchの位置を取得します
•intindexOf(String str)
•intindexOf(String str,int fromIndex)
•int lastIndexOf(int ch)
判定方法
•boolean contains(String str) 別の判定方法: if(str.index(str)!=-1)
•boolean startingWith( String str )
•boolean opensWith(String str)
•bolean isEmpty(String str)
•booleanquals(String str)
•booleanqualsIgnoreCase(String str);
変換メソッド
•文字配列を文字列に変換する
Constructor
1.String(char[] chs)
2.String(char[] chs, offset, count) は、文字配列の一部を文字列に変換します。
静的メソッド
1.static String copyValueOf(char[] chs)
2.static String copyValueOf(char[] chs,int offset,int count)
3.static String valueOf(char[] )
4.static String valueOf(char[] chs,int offset,int count)
•文字列を文字配列に変換します
char[] toCharArray
•文字配列を文字列に変換します
•文字列をByteに変換しますarray
byte[] toBytes
置換メソッド
String replace(olderStr,newStr)
Cutメソッド
String Split(regex)
部分文字列の取得[カテゴリの編集]
String subString(begin)
String subString( begin,end) には先頭は含まれますが、末尾は含まれません
文字列を大文字と小文字に変換します Android(10)
String toUpperCase()
String toLowerCase()
文字列の両端のスペースを削除します
文字列トリム()
2つの文字列を自然な順序で比較します
int CompareTo(String str)
3.文字列の練習
1. 文字列の反転
public class StringDemo2 { public static void main(String[] args){ String str = "avdkfasjks"; reverseMethod_1(str); } public static void reverseMethod_1(String str){ for(int i=str.length();i>0;i--){ System.out.print(str.charAt(i-1)); } } }
2. 最大の同一部分文字列を取得します
public class StringDemo2 { public static void main(String[] args){ String str1 = "avdkfasjks"; String str2 = "ewavdrtte"; System.out.println(commonMaxSubstring(str1, str2)); } public static String commonMaxSubstring(String str1,String str2){ int len = str1.length(); String str3 = null; outer: //i为子串的长度 for(int i = len;i>0;i--){ //j为子串的脚标 for(int j=0;j<len-i+1;j++){ str3=str1.substring(j,j+i); if(str2.contains(str3)) break outer; } } return str3; } }
以上ですJava 文字列の説明が紹介されています。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。