------- android培训、java培训、期待与您交流! ----------
一.代码举例解释
String s1="abc";
abc是一个对象,存在于常量池中
String s2=new String("abc")
s1和s2的区别,s2有两个对象
String类复写object的equals方法,判断字符串是否相同
二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(int ch) :返回的是ch在字符串中第一次出现的位置。
int lastIndexOf(int ch):反向索引一个字符出现的位置。
2.判断:
2.1字符串中是否包含某一个子串
boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回true。
特殊之处:int indexOf(String str) :返回的是str在字符串中第一次出现的位置,不存在返回-1。
所以也可以用于对指定判断是否包含。例如:if(str.indexOf("aa")!=-1)
而且该方法既可以判断,又可以获取出现的位置。
2.2字符串中是否有内容
boolean isEmpty() :当且仅当 length()为 0时返回 true。
2.3字符串是否是以指定内容开头
boolean startsWith(String prefix) :测试此字符串是否以指定的前缀开始。
2.4字符串是否是以指定内容结尾
boolean endsWith(String suffix) :测试此字符串是否以指定的后缀结束。
2.5判断字符串的内容是否相同(复写了Object类的equals方法)
boolean equals(Object anObject):将此字符串与指定的对象比较。当且仅当该参数不为null,并且是与此对象表示相同字符序列的 String 对象时,结果才为true。
2.6判断字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):将此String 与另一个String 比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这 两个字符串是相等的。
3.转换:
3.1将字符数组转换成字符串
构造函数:
String(char[] value):分配一个新的 String,使其表示字符数组参数中当前包含的字符序 列。 该字符数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
String(char[] value,int offset,int count):分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset参数是子数组第一个字符的索引,count参数指定子数组的长度。该子 数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
静态方法:
static String copyValueOf(char[] data):返回指定数组中表示该字符序列的String。
static String copyValueOf(char[] data,int offset,int count):返回指定数组中表示该字符序列的String。 data -字符数组。offset -子数组的初始偏移量。count -子数组的长度。
static String valueOf(char c):返回 char参数的字符串表示形式。
3.2将字符串转换成字符数组 *
char[] toCharArray():将此字符串转换为一个新的字符数组。
3.3将字节数组转换成字符串
String(byte[] bytes):通过使用平台的默认字符集解码指定的 byte数组,构造一个新的 String。新String 的长度是字符集的函数,因此可能不等于byte 数组的长度。
String(byte[] bytes,int offset,int length):通过使用平台的默认字符集解码指定的byte 子数组,构造一个新的String。新String 的长度是字符集的函数,因此可能不等于该子数组的长度。
3.4将字符串转换成字节数组
byte[] getBytes():使用平台的默认字符集将此 String编码为 byte序列,并将结果存储到一 个新的 byte 数组中。
byte[] getBytes(Charset charset):使用给定的 charset将此 String编码到 byte序列,并将结 果存储到新的 byte 数组。
3.5将基本数据类型转换为字符串
static String valueOf(char c):返回 char参数的字符串表示形式。
static String valueOf(char[] data,int offset,int count):返回char 数组参数的特定子数组的字符 串表示形式。offset 参数是子数组的第一个字符的索引。count参数指定子数组的长度。 字符数组的内容已被复制,后续修改不会影响新创建的字符串。
static String valueOf(double d):返回 double参数的字符串表示形式。 该表示形式恰好是单参数的 Double.toString 方法返回的结果。
static String valueOf(int i):返回 int参数的字符串表示形式。 该表示形式恰好是单参数的 I nteger.toString方法返回的结果。
例如:
3+""; //String.valueOf(3);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4.替换:
String replace(char oldChar,char newChar):返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar 得到的。
String replace(CharSequence target,CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例 如,用"b" 替换字符串"aaa" 中的"aa" 将生成"ba" 而不是"ab"。
5.切割:
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。 该方法的作用就像是使用给定的表达式和限制参数0 来调用两参数split 方法。因此,所得数组中不包括结尾 空字符串。
String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串。 此方法返回 的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终 止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。 如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。
6.获取字串:
String substring(int beginIndex,int endIndex):返回一个新字符串,它是此字符串的一个子字符 串。该子字符串从指定的beginIndex 处开始,直到索引endIndex - 1 处的字符。因此,该 子字符串的长度为endIndex-beginIndex。
String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串。该子 字符串从指定索引处的字符开始,直到此字符串末尾。
7.转换,去除空格,比较:
7.1将字符串转换成大写或者小写
String toUpperCase():使用默认语言环境的规则将此 String中的所有字符都转换为大写。此方法等效于 toUpperCase(Locale.getDefault())。
String toLowerCase():使用默认语言环境的规则将此 String中的所有字符都转换为小写。这等效于调用 toLowerCase(Locale.getDefault())。
7.2将字符串两端的多个空格去除
String trim():返回字符串的副本,忽略前导空白和尾部空白。
7.3对两个字符串进行自然顺序的比较。
int compareTo(String anotherString):按字典顺序比较两个字符串。该比较基于字符串中各个字 符的Unicode 值。按字典顺序将此String 对象表示的字符序列与参数字符串所表示的字符 序列进行比较。如果按字典顺序此String 对象位于参数字符串之前,则比较结果为一个负 整数。如果按字典顺序此String 对象位于参数字符串之后,则比较结果为一个正整数。如 果这两个字符串相等,则结果为0;compareTo只在方法 equals(Object)返回 true时才返 回 0。
StringBuffer
1.长度可以变化
2.可操作多个数据类型
3.最终都会变成字符串
JDK1.5后升级为StringBuilder,功能基本一样
append()可以添加任何类型数据,都自动变成字符串
关于享元模式的解析
Integer m=128;
Integer n=128;
sop("m==n:"+(m==n));
Integer a=127;
Integer b=127;
sop("a==b:"+(a==b));/*结果为true。因为a和b指向了同一个Integer对象。
当数值在byte范围内时,对于新特性,如果数值已经存在
则不会再开辟新的空间。