字符串的相关方法
1.字符串的替换
·public String replaceAll(String regex, String replacement)
【替换满足条件的子字符串,使用repalcement去替换regex的内容,而且
是全部替换】
·public String replaceFirst(String regex, String replacement)
【替换第一个满足条件的字符串】
范例:字符串的替换
public class stringtest {
public static void main(String[] args){
String str = "hello world !";
System.out.println(str.replaceAll("l", "_"));//替换所有的l
System.out.println(str.replaceFirst("l", "_")); //替换第一个l
System.out.println(str); //输出原来的字符串
}
}
输出的结果:
he__o wor_d !
he_lo world !
hello world !
2.字符串的截取
·public String substring(int beginIndex):
【截取从指定的开始索引到后面的所有内容】
·public String substring(int beginIndex, int endIndex)
【截取从指定开始索引到结束索引的内容,其中不包括结束索引下标的内容】
范例:字符串的截取
public class stringtest {
public static void main(String[] args){
String str = "hello world !";
System.out.println(str.substring(1)); //输出ello world !
System.out.println(str.substring(1, 6));//输出ello
}
}
3.字符串的拆分
·public String[] split(String regex)
【根据指定的拆分标识拆分所有内容】
·public String[] split(String regex, int limit)
【根据指定的拆分标识拆分字符串的部分内容】
例子:
public class stringtest {
public static void main(String[] args){
// String str = "hello world !";
// System.out.println(str.replaceAll("l", "_"));//替换所有的l
// System.out.print(str.replaceFirst("l", "_")); //替换第一个l
// System.out.println(str); //输出原来的字符串
// System.out.println(str.substring(1)); //输出ello world !
// System.out.println(str.substring(1, 6));//输出ello
String str = "wecomle to china !";
String result[] = str.split(" ");//将字符串按照 “ ”拆分
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
//部分拆分
String result1[]=str.split(" ",2);//将字符串按照“ ”拆分
for(int i=0;i<result1.length;i++){
System.out.println(result1[i]);
}
}
}
当以“.”拆分时,“.”表示访问对象的属性或者方法的时候使用,在这里需要转义(普通字符),用"\"
例:
public class Demo{
public static void main(String[] args){
String str="192.168.0.19";
String result[]=str.split("\\.");//将字符串按照“.”拆分
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
范例:张三:20|李四:12|王五:9
public class Demo{
public static void main(String[] args){
String str="张三:20|李思:13|王五:35";
String result[]=str.split("\\|");
for(int i=0;i<result.length;i++){
String perInfo[]=result[i].split(":");
System.out.println("姓名是:"+perInfo[0]+", 年龄是:"+perInfo[1]);
}
}
}
4、大小写转换方法
·public String toUpperCase()
【将小写转换成大写】
·public String toLowerCase()
【将大写转换成小写】
范例: 实现大小写转换
public class Demo{
public static void main(String[] args){
String str="ABCD";
System.out.println("转换后的内容是:"+str.toLowerCase());
String str1="hello world";
System.out.println("转换后的内容是:"+str1.toUpperCase());
}
}
5、 将首写字母转化为大写
字符串对象提供大量的方法,但是却缺少一个将首写字母转换成大写的方法,这个方法我们可以自己封装。
范例:将首字母大写
public class Demo{
public static void main(String[] args){
String name="smith";
System.out.println("转换后的内容是:"+initCase(name));
}
public static String initCase(String str){
//可以截取字符串的第一单词之后转换成大写
//可以截取第一个以后的所有内容加上第一步转换后的内容
return "set"+str.substring(0,1).toUpperCase()+str.substring(1);
}
}
6.字符串的其他方法的补充
·public boolean equalsIgnoreCase(String anotherString)
【忽略大小写比较】
范例:忽略大小写比较
public class Demo{
public static void main(String[] args){
String str1="abcd";
System.out.println("ABCD".equalsIgnoreCase(str1));//忽略大小写的比较
}
}
范例:取得指定索引下标的字符:
·public char charAt(int index)
public class Demo{
public static void main(String[] args){
String str1="abcd";
System.out.println(str1.charAt(1));
}
}
范例:返回的是某字符在字符串中第一次出现的位置
·public int indexOf(String str)
【返回的是指定字符在字符串中的下标索引】
public class Demo{
public static void main(String[] args){
String str1="abacda";
System.out.println(str1.indexOf("a"));//返回指定字符在字符串中出现的位置
}
}
范例:返回某个字符在字符串中最后一次出现的位置
·public int lastIndexOf(String str)
【返回指定字符在字符串中最后一次出现的位置】
public class Demo{
public static void main(String[] args){
String str1="abacda";
System.out.println(str1.lastIndexOf("a"));//返回指定字符在字符串中最后出现的位置
}
}
范例:去掉字符串两端的空格
·public String trim()
【去掉字符串两端的空格,但是不能去掉字符串中间的空格】
public class Demo{
public static void main(String[] args){
String str1=" abacda ";
System.out.print("vvvv");
System.out.print(str1.trim());
System.out.print("vvvv");
}
}
7.String 类型的引用传递
范例:自定义的对象的引用传递
class Person{
String name;
int age;
//setter和getter方法略
public Person(){}
public Person(String name,int age){
this.name=name;
this.age=age;
}
}
public class Demo{
public static void main(String[] args){
Person per=new Person("傻强",12);
change(per);//之前的引用传递 等价于 temp=per;
System.out.println(per.name);
}
public static void change(Person temp){
temp.name="利强";
}
}
范例:字符串的引用传递
public class Demo{
public static void main(String[] args){
String name="傻强";
change(name);//temp=name
System.out.println(name);
}
public static void change(String temp){
temp="利强";
}
}
8.String、StringBuffer、StringBuilder的区别
通过前面的学习我们知道一个String类型的字符串对象是不可以改变的,但是可以改变其引用,一旦改变了引用就会产生垃圾,所以如果一个String类型的字符串改变的频率过高则会造成系统的性能下降,于是我们有一个原则:
·如果一个字符串不需要经常改变则使用String类型声明,而且首选直接赋值的方式
·如果一个字符串需要经常改变,那么则使用StringBuffer或者StringBuilder来声明,这俩种字符串类型的内容是可以改变的。
范例:String类型的字符串和StringBuffer的比较
public class Demo{
public static void main(String[] args){
String str1="a";
long start1=System.currentTimeMillis();
for(int i=0;i<30000;i++){
str1=str1+"n";
}
System.out.println(str1);
long end1=System.currentTimeMillis();
System.out.println("耗时:"+(end1-start1));
StringBuffer sb=new StringBuffer("a");
long start2=System.currentTimeMillis();
for(int i=0;i<30000;i++){
sb.append("n");
}
System.out.println(str1);
long end2=System.currentTimeMillis();
System.out.println("耗时:"+(end2-start2));
}
}
上面的代码证明了当字符串改变频率很高的时候使用StringBuffer或者StringBuilder
那么StringBuffer和StringBuilder有什么区别?
·StringBuffer考虑了线程安全,StringBuilder没有考虑线程的安全。