String字符串的常见方法

字符串常见操作

1)获取字符串长度

使用 length() 方法获取字符串长度,例如,想要获取字符串 s1 的长度,就是 s1.length() 

相关代码为:


public class L {
	public static void main(String[] args) {
		//定义一个字符串
		String s1 = "一二三四五";
		//输出字符串长度
		System.out.println("s1的长度为"+s1.length());
	}
}

运行结果为:

s1的长度为5
 

注意:一个空格也计入一个长度

2)获取字符串指定下标的字符

使用 charAt() 方法获取字符串指定下标的字符,例如,想要获取字符串 s1 的指定下标的字符,就是 s1.charAt( 下标 ) 

相关代码为:

public class C {
	public static void main(String[] args) {
		//定义一个字符串
		String s1 = "一二三四五";
		//输出字符串下标为 2 的字符
		System.out.println("s1下标为 2 的字符为:"+ s1.charAt(2));
	}
}

运行结果为:

s1下标为 2 的字符为:三

3)比较字符串的内容

  • 比较字符串是否相等

比较两个字符串是否相等,实际上是仅仅想要比较两个字符串内容是否相等,这个时候我们需要使用 equals() 方法而不能 == 关系运算符

equals() 方法:比较字符串内容

== 关系运算符:比较字符串地址

相关代码程序为:


public class XiangDeng {
	public static void main(String[] args) {
		//定义三个字符串变量
		String s1 = "Hello";
		String s2 = "Hello";
		String s3 = "HELLO";
		
		//s1与s2进行比较,并输出比较结果
		System.out.println("==比较s1s2是否相等:"+(s1==s2));//结果为true(纯属巧合)
		System.out.println("equals比较s1s2是否相等:"+s1.equals(s2));//结果为true
		
		//s1与s3进行比较,并输出结果
		System.out.println("equals比较s1s3是否相等:"+s1.equals(s3));//结果为false
		System.out.println("equalsIgnoreCase比较s1s3是否相等:"+s1.equalsIgnoreCase(s3));//结果为true
	}
}

运行结果为:
==比较s1s2是否相等:true
equals比较s1s2是否相等:true
equals比较s1s3是否相等:false
equalsIgnoreCase比较s1s3是否相等:true

从代码可以得出,字符串 s1 与 s2 内容一致,所以 equals() 方法比较结果为 true ,可是为什么== 关系运算符比较的两个字符串的内存地址,结果居然也为 true 呢?其实吧,这仅仅是个巧合,只是在 Java 编译器在编译时,会自动把所有相同的字符串当作一个对象放入常量池,字符串 s1 与 s2的引用地址就是相同的,结果才为  true ,所以,这个纯纯巧合,换一种写法,== 关系运算符比较就会返回 false

从代码可以得出,字符串 s1 与 s3 看大小写时内容不一致,所以equals() 方法比较结果为 false,不看大小写时内容一致,不看大小写比较是否相等,使用 equalsIgnoreCase() 方法,比较结果为 true

  • 比较字符串大小

 两个字符串大小比较,使用 comparaTo() 方法,若两个字符串 s1与 s2 进行大小比较

s1.compareTo(s2)运行结果得出结论
正数s1 > s2
0s1 = s2
负数s1 < s2

相关程序为:


public class C {
	public static void main(String[] args) {
		//定义四个字符串
		String s1 = "ABC";
		String s2 = "DEF";
		String s3 = "CDE";
		String s4 = "CDE";
		//比较两个字符串大小并输出结果
		System.out.println("s1与s2大小比较结果为:" + s1.compareTo(s2));//-3说明s1小于s2
		System.out.println("s2与s1大小比较结果为:" + s2.compareTo(s1));//3说明s2大于s1
		System.out.println("s3与s4大小比较结果为:" + s3.compareTo(s4));//0说明s3等于s4
	}
}

运行结果为:

s1与s2大小比较结果为:-3
s2与s1大小比较结果为:3
s3与s4大小比较结果为:0

4)转换成大写或者小写

使用 toUpperCase() 方法转换字符串内容为大写;使用 toLowerCase() 方法转换字符串内容为小写

相关程序为:


public class C {
	public static void main(String[] args) {
		//定义两个字符串
		String s1 = "ABC";
		String s2 = "def";
		//将s1转换成小写并输出
		System.out.println("将s1转换成小写:"+s1.toLowerCase());
		//将s2转换成大写并输出
		System.out.println("将s2转换成大写:"+s2.toUpperCase());
	}
}

运行结果为:

将s1转换成小写:abc
将s2转换成大写:DEF

5)截取部分字符串

使用 substring() 方法,比如截取字符串s1

截取 s1 从 指定下标位置 截取至字符串的尾部s1.substring(指定下标位置)
截取 s1 从 指定下标位置 截取至另一个指定下标位置s1.substring(指定下标位置,另一个指定下标位置)

相关运行代码为:


public class C {
	public static void main(String[] args) {
		//定义一个String字符串
		String s1 = "123456789";
		//截取字符串从下标2位置至字符串尾部并输出
		System.out.println("截取从下标2位置至字符串尾部:"+s1.substring(2));
		//截取字符串从下标3位置至下标6位置(不含下标6位置)
		System.out.println("截取从下标3位置至至下标6位置(不含下标6位置):"+s1.substring(3,6));
	}
}

运行结果为:
截取从下标2位置至字符串尾部:3456789
截取从下标3位置至至下标6位置(不含下标6位置):456
 

6)搜索查找字符串

  • 查找指定字符串下标位置

从字符串头部开始查找指定子字符串,使用 indexOf() 方法,返回值为 int 类型

从字符串尾部开始查找指定子字符串,使用 lastIndexOf() 方法,返回值为 int 类型

无论 indexOf() 方法还是 lastIndexOf() 方法,都可以返回查找到的 指定子字符串下标 位置,如果字符串中存在 指定子字符串 ,则返回该 指定子字符串 所在位置下标;若字符串中不存在 指定子字符串 ,则返回 -1 ,表示未找到 指定子字符串

相关代码程序为:


public class C {
	public static void main(String[] args) {
		//定义一个字符串
		String s1 = "ABCDEFG";
		//从首位开始搜查DE子字符串下标位置并输出
		System.out.println("从首位开始搜查DE子字符串下标位置为:"+s1.indexOf("DE"));//3
		//从尾位开始搜查DE子字符串下标位置并输出
		System.out.println("从尾位开始搜查DE子字符串下标位置为:"+s1.lastIndexOf("DE"));//3
		
		//从首位开始搜查XY子字符串下标位置并输出
		System.out.println("从首位开始搜查XY子字符串下标位置为:"+s1.indexOf("XY"));//-1(不存在)
		
	}
}

运行结果为:

从首位开始搜查DE子字符串下标位置为:3
从尾位开始搜查DE子字符串下标位置为:3
从首位开始搜查XY子字符串下标位置为:-1
 

  • 判断字符串是否 以 指定子字符串 开头 结尾

startsWith() 方法用于判断字符串是否 以 指定子字符串 开头,返回值为 boolean 类型;

endsWith() 方法用于判断字符串是否 以 指定子字符串 结尾,返回值为 boolean 类型;

相关代码程序为:


public class C {
	public static void main(String[] args) {
		String s1 ="ABCDEF";
		//判断字符串是否以AB开头,并输出结果
		System.out.println("s1是否以AB开头"+s1.startsWith("AB"));
		//判断字符串是否以EF开头,并输出结果
		System.out.println("s1是否以EF开头"+s1.startsWith("EF"));
		//判断字符串是否以AB结尾,并输出结果
		System.out.println("s1是否以AB结尾"+s1.endsWith("AB"));
		//判断字符串是否以EF结尾,并输出结果
		System.out.println("s1是否以EF结尾"+s1.endsWith("EF"));
	}
}

运行结果为:

s1是否以AB开头true
s1是否以EF开头false
s1是否以AB结尾false
s1是否以EF结尾true
 

  • 查找当前字符串中是否  存在  指定子字符串

使用 contains() 方法可以查找当前字符串中是否存在 指定子字符串,返回值为 boolean 类型

相关代码程序为:


public class C {
	public static void main(String[] args) {
		//定义一个String字符串
		String s1 = "123456789";
		//判断s1中是否存在“23”并输出结果
		System.out.println("s1中是否存在“23”:"+s1.contains("23"));
		//判断s1中是否存在“25”并输出结果
		System.out.println("s1中是否存在“25”:"+s1.contains("25"));
	}
}

运行结果为:

s1中是否存在“23”:true
s1中是否存在“25”:false

7)去除首尾空白字符

  • 移除空字符串

使用 trim() 方法可以移除字符串首尾空白字符首尾空白字符包括空格\t\r\n 

注意:trim() 方法并没有改变字符串的内容,而是返回了一个新字符串

相关代码程序为:


public class C {
	public static void main(String[] args) {
		//定义一个含有空字符串的String字符串
		String s1 = "13468 \n\r\t";
		//输出原字符串s1
		System.out.printf("原字符串s1为:%s;s1长度为:%d\n",s1,s1.length());
		//去掉s1的空字符串并输出
		System.out.printf("去掉s1的空字符串后为:%s;长度为:%d",s1.trim(),s1.trim().length());
	}
}

运行结果为:

原字符串s1为:13468 

    ;s1长度为:9
去掉s1的空字符串后为:13468;长度为:5

  • 判断字符串是否为空字符串

使用 isEmpty() 方法可以判断字符串是否为 空字符串 ,返回值为 boolean 类型

相关代码程序为:


public class C {
	public static void main(String[] args) {
		//定义两个字符串s1和s2,s1为空
		String s1 = "";
		String s2 = "ABC";
		System.out.println("s1为空:"+s1.isEmpty());
		System.out.println("s2为空:"+s2.isEmpty());
	}
}

运行结果为:

s1为空:true
s2为空:false

8)替换字符串

  • 使用 replace() 方法进行替换

例如:对于命名为s1的字符串 “hello” ,想要把 “h” 换成 “H” ,就可以进行这样的操作:

s1.replace( ‘h' , 'H' )

相关代码程序为:


public class C {
	public static void main(String[] args) {
		//定义一个字符串s1
		String s1 = "hello";
		//将 'h' 替换为 'H',输出结果
		System.out.println("将 'h' 替换为 'H'的结果为:"+s1.replace('h', 'H'));
	}
}

运行结果为:

将 'h' 替换为 'H'的结果为:Hello

  • 通过正则表达式替换

使用 replaceAll() 方法使用“正则表达式”进行匹配

相关代码程序为:


public class C {
	public static void main(String[] args) {
		String n1 = "A,D.H&Y,,4,2,8.3";
		//replaceAll()方法使用“正则表达式”进行匹配
		//[\\,\\.\\&]匹配到3个字符内容
		//比如 ww23849将w替换@,输出为@@23849
		
		//[\\,\\.\\&]+匹配到多个字符内容
		//比如 ww23849将w替换@,输出为@23849
		String ret1 = n1.replaceAll("[\\,\\.\\&]","@");
		String ret2 = n1.replaceAll("[\\,\\.\\&]+","@");
		System.out.println("  n1:"+n1);
		System.out.println("ret1:"+ret1);
		System.out.println("ret2:"+ret2);
	}
}

运行结果为:

  n1:A,D.H&Y,,4,2,8.3
ret1:A@D@H@Y@@4@2@8@3
ret2:A@D@H@Y@4@2@8@3

9)分割字符串

使用 split() 方法分割字符串,注意传入的是“正则表达式”

相关代码程序为:

import java.util.Arrays;
//分割字符串
public class B02 {
	public static void main(String[] args) {
		String city1 = "西安,咸阳,北京,广东,上海,哈尔滨";
		String city2 = "西安+咸阳+北京+广东+上海+哈尔滨";
		String city3 = "西安P咸阳R北京M广东B上海A哈尔滨";
		String city4 = "西安11咸阳22北京3广东5上海888哈尔滨";
		
	
		//按照正则表达式进行分割
		String[] C1 = city1.split("\\,");
		String[] C11 = city1.split(",");
		System.out.println("city1为:"+city1);
		System.out.println("city1分割后为:"+Arrays.toString(C1));
		System.out.println("city1分割后为:"+Arrays.toString(C11));
		
		//按照正则表达式的特殊字符进行分割
		String[] C2 = city2.split("\\+");
//		String[] C22 = city2.split("+");//结果出错
		//+属于正则表达式的特殊字符,必须\\转义使用
		System.out.println("city2为:"+city2);
		System.out.println("city2分割后为:"+Arrays.toString(C2));
		
		String[] C3 = city3.split("[A-Z]");
		System.out.println("city3为:"+city3);
		System.out.println("city3分割后为:"+Arrays.toString(C3));
		
		String[] C4 = city4.split("[1-9]+");
		System.out.println("city4为:"+city4);
		System.out.println("city4分割后为:"+Arrays.toString(C4));
	}
}

运行结果为:

city1为:西安,咸阳,北京,广东,上海,哈尔滨
city1分割后为:[西安,咸阳,北京,广东,上海,哈尔滨]
city1分割后为:[西安,咸阳,北京,广东,上海,哈尔滨]
city2为:西安+咸阳+北京+广东+上海+哈尔滨
city2分割后为:[西安, 咸阳, 北京, 广东, 上海, 哈尔滨]
city3为:西安P咸阳R北京M广东B上海A哈尔滨
city3分割后为:[西安, 咸阳, 北京, 广东, 上海, 哈尔滨]
city4为:西安11咸阳22北京3广东5上海888哈尔滨
city4分割后为:[西安, 咸阳, 北京, 广东, 上海, 哈尔滨]
 

10)拼接字符串

使用 join() 方法拼接字符串

String.join("用于拼接连接的自定义内容",要拼接的数组名称)

相关代码程序为:


public class C {
	public static void main(String[] args) {
		String[] ns = {"h","e","l","l","o"};
		String s1 = String.join("@", ns);
		System.out.println("拼接后的ns字符串为:"+s1);
	}
}

运行结果为:

拼接后的ns字符串为:h@e@l@l@o

11)格式化字符串

通过·String.format() 方法,格式化字符串,可以自定义字符串形式

相关代码程序为:


public class C {
	public static void main(String[] args) {
		System.out.println(String.format("%s的%s很好看,我%d天追完了!", "成毅","莲花楼",7));
	}
}

运行结果为:

成毅的莲花楼很好看,我7天追完了!

  • 53
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值