String、StringBuffer和StringBuilder
字符串就是一连串的字符序列,Java提供了String和StringBuffer、StringBuilder三个类来封装字符串
String类是不可变的,一旦一个String对象被创建,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁
StringBuffer对象则代表一个字符序列可变的字符串,最终用toString方法将其转换为一个Sting对象
jdk1.5新增了一个StringBuilder类,用于替代StringBuffer,StringBuilder是不同步的,StirngBuffer线程同步
String
Constructor:
String() //创建一个包含0个字符串序列的String对象(并不是返回null)
String(byte[] bytes) //使用平台默认字符集将bytes数组解码,返回字符串
String(byte[] bytes, Charset charset) //使用指定字符集将bytes数组解码,返回字符串
String(byte[] bytes, int offset, int length) //使用平台默认字符集从byte数组的offset开始,长度为lenght的子数组解码,返回字符串
String(char[] value, int offset, int count)
String(String original) //根据字符串创建其副本
String(StringBuffer buffer) //根据StringBuffer对象来创建对应的String对象
String(StringBuilder builder)
Method:
char charAt(int index) //取字符串中指定位置的字符
int compareTo(String anotherString) //从第0个字符开始比较,所有对应字符都相同,返回0,否则返回字符差
boolean equals(Object anObject)
boolean equalsIgnoreCase(String str) //忽略大小写比较
boolean endsWith(String str) //该String对象是否以str结尾
byte[] getBytes() //将String对象转换成字节数组
void getChars(int srcBegin, int srcEnd, char[] det, int detBegin) //将字符串从srcBegin开始,srcEnd结束部分复制到dst字符数组中,其中dstBegin为目标字符数组的起始复制位置
int indexOf(int ch) //返回ch的索引
int indexOf(int ch, int fromIndex) //找出ch字符在该字符串中从fromIndex开始后第一次出现的位置
int indexOf(String str)
int indexOf(String str, int fromIndex)
int length() //返回字符串长度
String replace(char oldChar, char newChar) //将字符串中第一个oldChar替换成newChar
String[] split(String regex) //以regex分隔字符串,并放到字符串数组中,如何没有regex,返回原字符串
boolean startsWith() //该String对象是否以prefix开始
String substring(int beginIndex) //取从beginIndex位置开始到结束的子字符串
String substring(int begingIndex, int endIndex) //包头不包尾
char[] toCharArray() //将该String对象转换成char数组
String toLowerCase() //将字符串转换成小写
常量池(constant pool)
常量池指的是在编译期被确定、并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口中的常量,也包括字符串常量
String s0 = "hello";
String s1 = "hello";
String s2 = "he"+"llo";
System.out.println(s0==s1);
System.out.println(s0==s2);
System.out.prinltln(new String("hello") == new String("hello"));
程序最后一行,两次new出来的String对象不是同一个对象,所以返回false
Java会确保每个字符串常量只有一个,例子中s0和s1中的"hello"都是字符串常量,它们在编译器就被确定了,返回true
而"he"和"llo"也都是字符串常量,s2的"hello"也是字符串常量,s0 == s2返回true
StringBuilder
/**
StringBuilder
*/
class StringBuilderTest
{
public static void main(String[] args)
{
StringBuilder sb = new StringBuilder();
//追加字符串
sb.append("java"); //sb = "java"
//从指定位置插入字符串
sb.insert(0, "hello "); //sb = "hello java"
//在指定位置替换字符串
System.out.println(sb.replace(5, 6, ",")); //sb = "hello,java"
//删除指定位置的字符串
sb.delete(5, 6); //sb = "hellojava"
//反转
sb.reverse(); //sb = "avajolleh"
}
}
---------------------- ASP.Net+Android+IOS开发</a>、 .Net培训、期待与您交流! ----------------------