一、 String:
String s1 = "abc";
s1是一个类类型变量,"abc"是一个对象,字符串一旦初始化就不可以改变
s1此时指向"abc", 如果此时 s1 = "kk";则s1又指向"kk"
String s2 = new String("abc");
s1与s2的区别: s1在内存中有一个对象
s2在内存中有两个对象,new是一个,“abc”是一个
String s3 = "abc";
则s1 = s3,因为s1与s3是指向同一个对象"abc";
String: String a = "abc";
String b = "abc";
会先到字符池里寻找指向“abc”的引用,此时a == b的结果是true
String a = new String("abc");
String b = new String("abc");
不会涉及到字符池,此时 a == b的结果是false
String的常见的操作:
1、获取
1.1 字符串中包含的字符数,即长度
int length();
1.2 根据指定位置获取指定位置上的字符
char charAt(int index);
1.3 根据字符获取该字符在字符串中的位置
int indexOf(int ch);返回的是ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex);从fromIndex指定的位置开始,获取ch在字符串中出现的位置
int indexOf(String str);返回的是str在字符串中第一次出现的位置
int indexOf(String str, int fromIndex);从fromIndex指定位置开始,获取str在字符串中出现的位置
int lastIndexOf(int ch);.............
2、判断
2.1 字符串中是否包含一个子串
boolean contains(str);
特殊之处:indexOf(str):可以索引str在字符串中第一次出现的位置,如果返回-1,表示该str不在字符串中
2.2 字符串中是否有内容:
boolean isEmpty(); 原理就是判断长度是否为0
2.3 字符串是否以指定内容开头
boolean startsWith(str);
2.4 字符串是否以指定内容结尾
boolean endsWith(str);
2.5 判断字符串内容是否相同: 复写了Object类中的equals方法
boolean equals(str);
2.6 判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase();
3、转换:
3.1 将字符数组转换成字符串
构造函数: String(char[]);
String(char[], offset, count);将字符数组中的一部分转换成字符串
静态方法: static String copyValueOf(char[] data);
static String copyValueOf(char[] data, int offset, int count);
static String valueOf(char[]);
如果参数为 true,则返回一个等于 "true" 的字符串;否则,返回一个等于 "false" 的字符串。
3.2 将字符串转换成字符数组
char[] toCharArray();
3.3 将字节数组转换成字符串
String(byte[]);
String(byte[], offset, count);将数组中的一部分转换成字符串
3.4 将字符串转换成字节数组
byte[] getBytes();
3.5 将基本数据类型转换成字符串
static String valueOf(int);
static String valueOf(double);
特殊;字符串和字节数组在转换过程中,是可以指定编码表的
4、替换
String replace(oldchar, newchar);如果要替换的字符不存在,返回的还是原串
public String replace(CharSequence target,CharSequence replacement)使用指定的字面值替换序列替换此
字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 "b" 替换字符串
"aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。
5、切割
String[] split(regex);
将原字符串以regex为标识,切割为几部分,放在String数组里,如"tangjian,tanghui,lijing",如果
regex = ',';那么结果就是{"tangjian","tanghui","lijing"}
6、子串,获取字符串中的一部分
String substring(begin); 从begin开始后面的,,,如果角标不存在,会出现字符串角标越界异常
String substring(begin, end);中间的部分,但不包括下标为end的字符
s.substring(0, s.length());可以获得整个字符串s
7、转换,去除空格,比较
7.1 将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
7.2 将字符串两端的空格去除
String trim();
7.3 对两个字符串进行自然顺序的比较
int compareTo(string);
如果s = "abc", s1 = "aec";则 s.compareTo(s1) = -3;
二、StringBuffer
是一个容器:特点:1、长度是可变化的
2、可以直接操作多个数据类型
3、最终会通过toString方法变成字符串
CURD:
C create
U update
R read
D delete
1、存储:StringBuffer append();将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index, 数据); 可以将数据插入到指定index位置
2、删除:StringBuffer delete(start, end);删除数据,包含Start,不包含end
StringBuffer deleteCharAt(int index);删除指定位置的 字符
sb.delete(0, sb.length()); 清空缓冲区
3、获取:char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start, int end);
4、修改:StringBuffer replace(int start, int end, String str);
void setCharAt(int index, char ch);将给定索引处的字符设置为 ch。
5、反转:StringBuffer reverse(); 如abcdefg反转成gfedcba
6、将缓冲区中指定的数据存储到指定的字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, intdstBegin);
将字符从此序列复制到目标字符数组 dst。 如果s1 = "abcdefgh",getChars(1, 4, ch, 1);
则ch[6] = {'0','b','c','d','0','0'}
三、StringBuilder 与 StingBuffer
方法不变,功能一样,区别就是是否同步,有没有锁的问题。
StringBuffer是线程同步的
StringBuilder是线程不同步的,单线程是可以选择用StringBuilder。
Java升级:1,提高效率 2、简化书写 3、提高安全性
四、String 与 StringBuffer
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.
sb.append("hello");
|
|