1. オブジェクトを作成する
Java プログラム内の直接文字列定数の場合、JVM は文字列プールを使用してそれらを保存します。文字列直接定数が初めて使用されるとき、JVM はそれを文字列プールに入れてキャッシュします。通常の状況では、文字列プール内の文字列オブジェクトはガベージ コレクションされません。プログラムで文字列を再度使用する必要がある場合、新しい文字列を再作成することなく、参照変数は文字列内の既存の文字列を直接指すことができます。 new 操作を使用して作成された文字列オブジェクトは、文字列プール内のオブジェクトを指しませんが、 intern() メソッドを使用して、文字列プール内のオブジェクトを指すことができます。
次のようにコードをコピーします。
パブリック クラス StringDemo1 {
public static void main(String[] args){
文字列 str1="abc";
文字列 str2 = "abc";
文字列 str3 =new String("abc");
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
}
}
よくある質問
次のようにコードをコピーします。
文字列 str3 =new String("abc");
オブジェクトはいくつ作成されましたか?
答え: 2
次のようにコードをコピーします。
文字列 str ="ab"+"cd";
オブジェクトはいくつ作成されましたか?答え: 1 つです。 「ab」と「cd」は文字列プールに配置される定数です。したがって、abcd 文字列プールが 1 つだけ作成され、文字列 abcd が文字列プールに保存されます。
次のようにコードをコピーします。
パブリック クラス StringDemo1 {
public static void main(String[] args){
文字列 str1 = "ab";
文字列 str2="cd";
String str3 ="ab"+"cd";// オブジェクトを作成し、文字列プールに追加します。
文字列 str4 =str1+str2;
文字列 str5 =str1+"cd";
System.out.println(str3==str4);//false
System.out.println(str3==str5);//false
}
}
上記のコードからわかります。新しいメソッドによって作成された新しいオブジェクトを含む "+" 接続式の場合、テキストを含む引用符で作成された String オブジェクトのみが文字列プールに追加されます。プール内の文字列には追加されません。
しかし、注意が必要な状況があります。
次のようにコードをコピーします。
パブリック クラス StringDemo1 {
プライベート最終静的文字列 str1 = "ab";
プライベート最終静的文字列 str2 = "cd";
public static void main(String[] args){
String str3 ="ab"+"cd";// オブジェクトを作成し、文字列プールに追加します。
文字列 str4 =str1+str2;
文字列 str5 =str1+"cd";
System.out.println(str3==str4);//true
System.out.println(str3==str5);//true
}
}
これはなぜでしょうか?その理由は、定数の場合です。その値は固定されているため、コンパイル時に決定できます。
上記のコードを少し変更して、何が起こるかを確認してください。
次のようにコードをコピーします。
パブリック クラス StringDemo1 {
プライベート最終静的文字列 str1;
プライベート最終静的文字列 str2;
静的{
str1="ab";
str2="cd";
}
public static void main(String[] args){
String str3 ="ab"+"cd";// オブジェクトを作成し、文字列プールに追加します。
文字列 str4 =str1+str2;
文字列 str5 =str1+"cd";
System.out.println(str3==str4);//false
System.out.println(str3==str5);//false
}
}
str1 と str2 は定数として定義されていますが、s の値が計算される前にすぐに値が代入され、いつ代入されるか、どのような値が代入されるかは変数であるため、性質は変数と同じです。実行時にのみ作成できます。
2.文字列メソッド
取得メソッド
•int length()
•char charAt(int Index) は位置に基づいて文字を取得します。
•int indexOf(int ch) は、文字列内で最初に出現する ch の位置を返します。
•int indexOf(int ch,int fromIndex) は、fromIndex で指定された位置から開始し、文字列内で最初に出現する ch の位置を取得します。
•intindexOf(文字列str)
•intindexOf(String str,int fromIndex)
•int lastIndexOf(int ch)
判定方法
・boolean contains(String str) 別の判定方法:if(str.index(str)!=-1)
•booleanstartsWith(String str)
•boolean endsWith(String str)
•bolean isEmpty(String str)
•ブール値等しい(文字列 str)
•boolean 等しい IgnoreCase(String str);
変換方法
•文字配列を文字列に変換する
コンストラクタ
1.文字列(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[] toBytes
交換方法
文字列置換(olderStr,newStr)
切断方法
文字列分割(正規表現)
部分文字列の取得[カテゴリを編集]
文字列部分文字列(開始)
文字列 subString(begin,end) には先頭が含まれますが、末尾は含まれません
文字列を大文字と小文字に変換する Android(10)
文字列 toUpperCase()
文字列をLowerCase()に変換
文字列の両端からスペースを削除する
文字列トリム()
2 つの文字列を自然な順序で比較します
int 比較先(文字列 str)
3.ストリングの練習
1. 文字列の反転
次のようにコードをコピーします。
パブリック クラス StringDemo2 {
public static void main(String[] args){
文字列 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. 最大の同一部分文字列を取得する
次のようにコードをコピーします。
パブリック クラス StringDemo2 {
public static void main(String[] args){
文字列 str1 = "avdkfasjks";
文字列 str2 = "ewavdrtte";
System.out.println(commonMaxSubstring(str1, str2));
}
public static String commonMaxSubstring(String str1,String str2){
int len = str1.length();
文字列 str3 = null;
外側:
//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))
アウターを壊す。
}
}
str3 を返します。
}
}