一. String:
字符串是final类。创建字符串对象后,将不能更改构成字符串的字符。
class Test
{
String s1="ABC"; //在内存新建一个字符串对象
String s2="ABC"; //内容相同,指向上一个对象
String s3=new String("ABC"); //新建
char[] chars={'A','B','C'};
String s4=new String(chars); //新建
public void compare ()
{
System.out.println("s1==s2" + (s1==s2));
System.out.println("s1==s3" + (s1==s3));
System.out.println("s1==s4" + (s1==s4));
System.out.println("s3==s4" + (s3==s4));
System.out.println("s1.eauals(s2)" + s1.equals(s2));
System.out.println("s1.eauals(s3)" + s1.equals(s3));
System.out.println("s1.eauals(s4)" + s1.equals(s4));
System.out.println("s3.eauals(s4)" + s3.equals(s4));
}
}
class StringTest
{
public static void main(String[] args)
{
new Test().compare();
}
}
1. 字符串比较:
方法 | 说明 |
== | 比较引用地址,判断是否为同一个目标。返回真假 |
equals ( ) | 比较值,判断内容是否相同。返回真假 |
equalsIgnoreCase ( ) | 忽略大小写进行比较值。返回真假 |
compareTo ( ) | 按字母顺序比较两个字符串的值。相等返回0,比较字符串在参数字符串之前返回值小于0,否则返回值大于0 |
startsWith ( ) | 是否以参数字符串开始。返回真假 |
endsWith ( ) | 是否以参数字符串结束。返回真假 |
class StringTest
{
public static void main(String[] args)
{
String s1="ABC";
String s2="abc";
String s3="ABcDe";
String s4="ABcde";
//equalsIgnoreCase()忽略大小写比较
//compareTo()按字母顺序比较。基于字符串中各个字符的Unicode值
//startsWith()判断是否以参数为开始
//endsWith()是否以参数为结束
System.out.println("s1.equalsIgnoreCase(s2)" + s1.equalsIgnoreCase(s2));
System.out.println("s3.compareTo(s4)" + s3.compareTo(s4));
System.out.println("s3.startsWith(\"AB\")" + s3.startsWith("AB"));
System.out.println("s4.endsWith(\"dr\")" + s4.endsWith("dr"));
}
}
2 搜索字符串:
方法 | 说明 |
indexOf(int ch) | 返回第一次出现的字符ch的索引 |
indexOf(String str) | 返回第一次出现的字符串str的索引 |
lastIndexOf(int ch) | 返回最后出现的字符ch的索引 |
lastIndexOf(String str) | 返回最后出现的字符串str的索引 |
class StringTest
{
public static void main(String[] args)
{
String str="ABCabcABCabcJKLabcP";
System.out.println("str.indexOf('c')" + str.indexOf('c'));
System.out.println("str.indexOf(\"BC\")" + str.indexOf("BC"));
System.out.println("str.lastIndexOf('c')" + str.lastIndexOf('c'));
System.out.println("str.lastIndexOf(\"BC\")" + str.lastIndexOf("BC"));
}
}
3 提取字符串:
方法 | 说明 |
charAt(int index) | 从指定非负索引提取字符。返回字符 |
substring(int index) | 从指定索引提取字符串至结尾。返回字符串 |
substring(int begin, int end) | 返回从指定的开始和结束索引提取的字符串 |
concat(String str) | 将参数字符串连接。返回新的字符串 |
replace(char old, char new) | 使用新的字符替换字符串中所有的旧字符 |
trim() | 将字符串头尾的空格取出后返回副本 |
class StringTest
{
public static void main(String[] args)
{
String str=" ABCabcABCabcJKLabcP "; //前后各有2个空格
System.out.println("字符串:"+str+"\n长度:str.length() ="+str.length()); //长度
System.out.println("索引为5的字符:str.charAt(5)= " + str.charAt(5));
System.out.println("索引为5开始的字符串:str.substring(5)= " + str.substring(5));
System.out.println("索引为5开始至结尾的字符串长度:"+str.substring(5).length());
System.out.println("索引为5-11上的字符串:str.substring(5,12) = " + str.substring(5, 12));
System.out.println("在字符串结尾添加Hello:str.concat(\"Hello\") = " + str.concat(" Hello"));
System.out.println("将字符串中的A替换为Y:str.replace('A','Y') = " + str.replace('A', 'Y'));
System.out.println("去除字符串首尾的空格:str.trim() =" + str.trim());
}
}
4. 字符串转换:
方法 | 说明 |
toUpperCase() | 将所有字符转为大写 |
toLowerCase() | 将所有字符转为小写 |
copyValueOf(char[] chars) | 将字符数组转为字符串 |
toCharArray() | 将字符串转为字符数组 |
valueOf() | 转数字为字符串 |
class StringTest
{
public static void main(String[] args)
{
String str1="ABCabcABCabcJKLabc";
System.out.println("\n转大写:"+str1.toUpperCase());
System.out.println("转小写:"+str1.toLowerCase());
char chars[]={'a', 'b', 'c', 'd', 'e', 'f'};
System.out.println("\n构造方法从字符数组中索引1开始提取4个字符新建字符串:"+new String(chars, 1, 4));
System.out.println("静态方法转字符数组为字符串:"+String.copyValueOf(chars));
System.out.println("静态方法从字符数组中索引1开始提取4个字符转为字符串:"+String.copyValueOf(chars, 1, 4));
System.out.println("\n字符串转为数组:"+str1.toCharArray());
System.out.println("\n转数字为字符串:"+String.valueOf(123));
System.out.println("转数字为字符串:"+String.valueOf(123.456));
}
}
5. 字符串分割:
方法 | 说明 |
split(String str) | 以str为标记分割字符串为数组 |
class StringTest
{
public static void main(String[] args)
{
String str1="ABCabcABCabcJKLabcD";
String[] str2=str1.split("c");
for(int i=0; i<str2.length; i++)
{
System.out.println(str2[i]);
}
}
}
二. StringBuffer:
可修改的字符串类,动态的字符数组。
新建 | 构造方法 | 说明 |
StringBuffer ( ) | 默认保留16个字符的空间 | |
StringBuffer ( int length ) | 同时设置缓存器大小 | |
StringBuffer ( String value ) | 接收参数 | |
| 方法 | 说明 |
增 | insert ( int index, String str ) | 在指定索引插入字符串 |
append (String str ) | 在末尾添加字符串 | |
删 | delete ( int start , int end ) | 删除指定区间的字符,end位保留 |
deleteCharAt ( int index ) | 指定位置删除字符 | |
改 | replace (int start, int end, String str) | 修改指定区间字符为str |
setCharAt (int index, char ch ) | 修改指定位置字符 | |
reverse ( ) | 反转整条字符串 | |
查 | charAt ( int index ) | 指定位置获取字符 |
indexOf ( String str ) | 查询str首次出现的位置 | |
lastIndexOf ( String str ) | str最后出现位置 | |
substring ( int start, int end ) | 截取区间为新的字符串 | |
length ( ) | 字符串长度 |
class StrBufTest
{
public static void main(String[] args)
{
StringBuffer sb1=new StringBuffer("StringBuffer1");
StringBuffer sb2=new StringBuffer("StringBuffer2");
System.out.println("sb1="+sb1+"\nsb2="+sb2);
sb1.insert(6," Hello ");
sb1.append("world");
System.out.println("sb1="+sb1);
sb2.delete(6,8);
sb2.deleteCharAt(0);
System.out.println("sb2="+sb2);
sb1.replace(0,6, "It's a");
sb1.setCharAt(14,'b');
System.out.println("sb1="+sb1);
}
}
JDK1.5中提供了一个新的动态字符串类StringBuilder,与 StringBuffer 兼容,但不保证同步。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。