String常用方法

1.String常用方法

字符串是常量;它们的值在创建之后不能更改。

String str = "abcdefg";
int strLenght = str.length();//字符串长度(strLenght=7)

char ch = str.charAt(0);//返回指定索引处的char值(ch='a'),如果超出字符串的长度范围会报:java.lang.StringIndexOutOfBoundsException

boolean b = str.endsWith("fg");//判断是否已字符串"fg"结尾(b=true)

int index = str.indexOf("bc");//返回在字符串str中第一次出现指定字符或字符串的索引(index=1)

index = str.indexOf("bc", 2);//返回在字符串str中第一次出现指定字符或字符串的索引,从指定索引开始(index=-1)

String str2 = str.replace("efg", "abc");//将字符串str中的"efg"替为"abc",返回一个新的字符串(str2="abcdabc")

String str3 = "1,2,3,4,5,6";
String array[] = str3.split(",");//1 2 3 4 5 6注意有些分隔符需要转义,例如"|",需要写成"\\|"
array = str3.split(",",4);//1 2 3 4,5,6

String str4 = str.substring(1,3);//返回一个新的字符串str4="bc";
str4 = str.substring(1);//bcdefg

char charArray[] = str.toCharArray();//将此字符串转换为一个新的字符数组。

String str5 = " 123456  ";
str5 = str5.trim();//去掉首尾空格(str5="123456")

String str6 = str.toUpperCase();//将所有字符转换成大写(str6="ABCDEFG")
str6 = str.toLowerCase();//将所有字符转换成小写(str6="abcdefg")

2.StringBuffer, StringBuilder

StringBuffer, StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。
每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

StringBuffer stringBuffer = new StringBuffer();//构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
stringBuffer = new StringBuffer(20);//构造一个不带字符,但具有指定初始容量的字符串缓冲区。
stringBuffer = new StringBuffer(str);//构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

stringBuffer.append("123");//abcdefg123
stringBuffer.insert(4,"456");//abcd456efg123
String str7 = stringBuffer.toString();

boolean b2 = str.equals(str.toUpperCase());//将此字符串与指定的对象比较(b2=false)
b2 = str.equalsIgnoreCase(str.toUpperCase());//将此 String与另一个 String比较,不考虑大小写。(b2=true)

3.String s = new String("abc");创建了几个对象?

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String 对象是不可变的,所以可以共享。
字符串"abc"对应一个对象,存在字符串缓冲区,如果字符缓冲区不存在"abc"这个对象,就会先创建这个对象,new String 创建了一个新对象(现在是创建了两个)如果之前字符串缓冲区已经存在了"abc"这个对象,就不会再创建,会共享已经存在的,new String 创建了一个新对象(现在是创建了一个)

String s1 = new String("abc");
String s2 = new String("abc");
boolean bs1 = s1.equals(s2);//equals比较的是s1和s2这两个对象的内容,他们在内存中指向的是同一个"abc"(bs1=true)
bs1 = s1==s2;//==比较的是s1和s2存放的地址,这里新创建了2个对象对应的地址不同(bs1=false)

仅个人想法,有问题还请大家指出,谢谢!

你可能感兴趣的:(String,StringBuilder,StringBuffer)