【String及其常用API】
1、String是不可变对象
java.lang.String使用了final修饰,不能被继承;
字符串底层封装了字符数组及针对字符数组的操作算法;
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;
Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码。
2、String常量池
Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;
对于重复出现的字符串直接量,JVM会首先在常量池查找,如果存在即返回该对象。
/** 测试String常量池*/
@Test
public void testConstantPool(){
String str1="Hello";
String str2="Hello";//不会创建新的String对象,而是使用常量池中已有的"Hello"
System.out.println(str1==str2);//输出true
String str3=new String("Hello");
System.out.println(str1==str3);//输出false
}
3、内存编码及长度
String在内存中采用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算1个字符长度,占用两个字节。
/** 获取String对象的长度*/
@Test
public void testLength(){
String str1="Hello";
String str2="你好,String";
}
4、使用indexOf实现检索
indexOf方法用于实现在字符串中检索另外一个字符串
String提供几个重载的indexOf方法
int indexOf(String str):在字符串中检索str,返回其第一次出现的位置,如果找不到则返回-1
int indexOf(String str,int fromIndex):从字符串的fromIndex位置开始检索
String还定义有lastIndexOf方法:
int lastIndexOf(String str,int from):str在字符串中多次出现时,将返回最后一个出现的位置
/**在一个字符串中检索另外一个字符串*/
@Test
public void testIndexOf(){
String str="I can because i think i can";
int index=str.indexOf("can");
System.out.println(index);//2
index=str.lastIndexOf("can");
System.out.println(index);//24
index=str.indexOf("can",6);
System.out.println(index);//24
index=str.indexOf("Can");
System.out.println(index);//-1
}
5、使用substring获取子串
substring方法用于返回一个字符串的子字符串。
substring常用重载方法定义如下:
String substring(int beginIndex,int endIndex):返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串
String substring(int beginIndex):返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串
/** 在一个字符串中截取指定的字符串*/
@Test
public void testSubstring(){
String subStr=str.substring(11,17);
System.out.println(subStr);//oracle
subStr=str.substring(7);
System.out.println(subStr);//www.oracle.com
}
6、trim(查阅API)
/** 去掉一个字符串的前导和后继空字符*/
@Test
public void testTrim(){
String userName=" good man ";
userName=userName.trim();
System.out.println(userName.length());//8
System.out.println(userName);//good man
}
7、chaAt(查阅API)
String中定义有charAt方法:
char charAt(int index):方法charAt()用于返回字符串指定位置的字符。参数index表示指定的位置
/** 遍历一个字符串中的字符序列*/
@Test
public void testCharAt(){
String name="Whatisjava?";
for(int i=0;i
char c=name.charAt(i);
}
//W h a t i s j a v a?
}
8、startsWith和endsWith(查阅API)
/** 检测一个字符串是否以指定字符串开头或结尾*/
@Test
public void testStartWithAndEndWith(){
String str="Thinking in Java";
System.out.println(str.endsWith("Java"));//true
System.out.println(str.startsWith("T"));//true
System.out.println(str.endsWith("thinking"));//false
}
9、大小写变换(查阅API)
/** 转换字符串英文字母的大小写形式*/
@Test
public void testToUpperCaseAndToLowerCase(){
String str="我喜欢Java";
str=str.toUpperCase();
System.out.println(str);//我喜欢JAVA
str=str.toLowerCase();
System.out.println(str);//我喜欢java
}
10、valueOf(查阅API)
/** 将其他类型转换为字符串类型 */
public void testValueOf(){
double pi=3.1415926;
int value=123;
boolean flag=true;
char[] charArr={'a','b','c','d','e','f','g'};
String str=String.valueOf(pi);
str=String.valueOf(value);
str=String.valueOf(flag);
str=String.valueOf(charArr);
}
【StringBuilder及其API】
1、StringBuilder封装可变字符串
StringBuilder封装可变的字符串,对象创建后可以通过调用方法改变其封装的字符序列。
StringBuilder有如下常用构造方法:
public StringBuilder()
public StringBuilder(String str)
2、StringBuilder常用方法
StringBuilder append(String str):追加字符串
StringBuilder insert(int dstOffset,String s):插入字符串
StringBuilder delete(int start,int end):删除字符串
StringBuilder replace(int start,int end,String str):替换字符串
StringBuilder reverse():字符串反转
3、StringBuilder
StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return this。
由于改变封装的字符序列后又返回了该对象的引用。可以按照如下简洁的方式书写代码:
buf.append("ibm").append("java").insert(3,"oracle").replace(9,13,"JAVA");
4、append方法(查阅API)
/** 测试StringBuilder的append方法 */
@Test
public void testAppend(){
StringBuilder buf=new StringBuilder("Programming Language:");
buf.append("java").append("cpp").append("php").append("c#").append(objective-c);
}
4、insert(查阅API)
/** 测试StringBuilder的insert方法 */
@Test
public void testInsert(){
StringBuilder buf=new StringBuilder("javacppc#objective-c");
buf.insert(9,"php");
}
5、delete(查阅API)
/** 测试StringBuilder的delete方法 */
@Test
public void testDelete(){
StringBuilder buf=new StringBuilder("javaoraclecppc#php");
buf.delete(4,4+6);
}
6、StringBuilder总结
StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些;
java的字符串连接的过程是利用StringBuilder实现的
String s="AB";
String s1=s+"DE"+1;
String s1=new StringBuilder(s).append("DE").append(1).toString();
StringBuffer和StringBuilder
StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快
领取专属 10元无门槛券
私享最新 技术干货