Java-字符串
学习如逆水行舟,不进则退
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
前言
字符串是Java程序中经常处理的对象,如果字符串运用得不好,将影响到程序运行的效率。在Java中字符串作为String类的实例来处理。以对象的方式处理字符串,将使字符串更加灵活、方便。了解字符串上可用的操作,可以节省程序编写与维护的时间。
一、String类
前面基础的时候我们介绍了char类型,它只能表示单个字符,不能表示由多个字符连接而成的字符串。在Java语言中将字符串作为对象来处理,可以通过java.lang包中的String类来创建字符串对象。
1、声明字符串
声明字符串必须包含一对双引号(" ")之内。例如
"zhangsan"
- 1
2、创建字符串
String name = "zhangsan";
- 1
二、连接字符串
对于已声明的字符串,可以对其进行相应的操作。连接字符串就是字符操作中较简单的一种。可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接
1、连接多个字符串
使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个运算符并产生一个String对象。例如
public class Test {
public static void main(String[] args) {
String a = "hello";
String b = "word";
String c = a + b;
System.out.println(c);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
输出为:
2、连接其他数据类型
字符串也可以同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,会将这些数据直接转换成字符串。
例如:
public class Test {
public static void main(String[] args) {
int time = 10;
System.out.println("我每天学习"+time+"小时");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
输出
三、获取字符串信息
字符串作为对象,可通过相应方法获取字符串的有效信息,如获取某字符串的长度、某个索引位置的字符等。
1、获取字符串长度
使用String类的length()方法可获取声明的字符串对象的长度。
语法如下:
str.length();
- 1
2、字符串查找
String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf方法返回的是搜索的字符或字符串最后一次出现的位置。
1、indexOf(str)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihao qige,nihao qige";
System.out.println("qige第一次出现的位置是:"+ a.indexOf("qige"));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
1、lastIndexOf(str)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihao qige,nihao qige";
System.out.println("qige最后一次出现的位置是:"+ a.lastIndexOf("qige"));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
3、获取指定索引位置的字符
使用charAt()方法可将指定索引处的字符返回。
语法如下:
str.charAt(int index)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
System.out.println("第三个位置的字符为:"+ a.charAt(2));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
由于下标是从0开始的,所以第三个位置的下标为2
四、字符串操作
1、获取子字符串
通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
substring()方法有两种不同的方法重载,来满足不同的需要。
1、substring(int index)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
System.out.println("从第三个位置截取到最后一个位置:"+ a.substring(2));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、substring(int bIndex, int eIndex)
该方法返回的是从字符串某一个索引位置开始截取至某一个索引位置结束的子串。
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
System.out.println("从第三个位置截取到第六个位置:"+ a.substring(2,5));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
2、去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。
语法如下
str.trim()
例如:
public class Test {
public static void main(String[] args) {
String a = " nihao qige ";
System.out.println("++++++不去除空格:"+ a);
System.out.println("去除前导和后导空格:"+ a.trim());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3、字符串替换
使用replace()方法可实现将指定的字符或字符串替换成新的字符或字符串
语法如下:
str.replace(char oldChar,char newChar)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
System.out.println("将qige变为xxxx:"+ a.replace("qige","xxxx"));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
4、判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型
1、startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串
语法如下:
str.startsWith(String prefix)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
System.out.println("是否以nihao开头"+ a.startsWith("nihao"));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
5、判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。
要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
1、equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true
语法如下:
str.equals(String otherstr)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
String b = "nihaoqige";
System.out.println("两个字符串是否相等"+ a.equals(b));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、equalsIgnoreCase()方法
使用equals()方法对字符串进行比较时是区分大小写的,而使用equlsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。
语法如下:
str.equalsIgnoreCase(String otherstr)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
String b = "NiHaoQige";
System.out.println("两个字符串是否相等"+ a.equals(b));
System.out.println("两个字符串忽略大小写后是否相等"+ a.equalsIgnoreCase(b));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
6、按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0
语法如下:
str.compareTo(String otherstr)
例如:
public class Test {
public static void main(String[] args) {
String a = "a";
String b = "b";
System.out.println("比较两个字符串的大小"+ a.compareTo(b));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
7、字母大小写转换
1、toLowerCase()方法
该方法将String转换为小写
语法如下:
str.toLowerCase()
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoQIGE";
System.out.println("将字符串转换为小写"+ a.toLowerCase());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
2、toUpperCase()方法
该方法将String转换为大写
语法如下:
str.toUpperCase()
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoQIGE";
System.out.println("将字符串转换为大写"+ a.toUpperCase());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
8、字符串分割
使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了两种分割形式。
1、split(String sign)
该方法可根据给定的分割符对字符串进行拆分
语法如下:
str.split(String sign)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqige";
String[] qs = a.split("q");
for (String b: qs
) {
System.out.println(b); //输出分割后的字符串
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2、split(String sign,int limit)
该方法可以根据给定的分割符对字符串进行拆分,并限定拆分的次数
语法如下:
str.split(String sign,int limit)
例如:
public class Test {
public static void main(String[] args) {
String a = "nihaoqigenihaoqigenihaoqigenihaoqigenihaoqige";
String[] qs = a.split("q",2); //已q分割,并且只分割2次
for (String b: qs
) {
System.out.println(b); //打印分割后的字符串
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
五、格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。
1、format(String format,Object…args)
2、format(Local l,String format,Object…args)
1、日期和时间字符串格式化
在应用程序设计中,经常需要显示时间和日期。如果想输出满意的日期和时间格式,一般需要编写大量的代码经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。
1、日期格式化
例如:返回一个月中的天数
public class Test {
public static void main(String[] args) {
Date date = new Date(); //创建Date对象
String s = String.format("%te", date); //通过format()方法对date进行格式化
System.out.println(s);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2、时间格式化
使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间格式化转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。
例如:实现将当前时间信息以2位小时数、2位分钟数、2位秒数形式输出。
public class Test {
public static void main(String[] args) {
Date date = new Date(); //创建Date对象
String hour = String.format("%tH", date); //通过format()方法对date进行格式化
String minute = String.format("%tM", date);
String second = String.format("%tS", date);
//输出的信息
System.out.println("现在是:" + hour + "时" + minute +"分" + second + "秒");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3、格式化常见的日期时间组合
格式化日期与时间的转换符定义了各种日期时间组合的格式。
例如:
public class Test {
public static void main(String[] args) {
Date date = new Date(); //创建Date对象
String time = String.format("%tc", date); //通过format()方法对date进行格式化
String form = String.format("%tF", date);
String second = String.format("%tS", date);
//输出的信息
System.out.println("全部的时间信息是:" + time);
System.out.println("年-月-日格式:" + form);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2、常规类型格式化
常规类型的格式化可应用于任何参数类型
例如:
public class Test {
public static void main(String[] args) {
String str = String.format("%d", 400/2); //将结果以十进制格式显示
String str2 = String.format("%b", 3 > 5); //将结果以boolean型显示
String str3 = String.format("%x", 200); //将结果以十六进制格式显示
//输出的信息
System.out.println( str);
System.out.println( str2);
System.out.println( str3);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
六、使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\d"表示数字0-9中的任何一个,”\d"就是元字符。
例如:
public class Test {
public static void main(String[] args) {
//定义要匹配E-mail地址的正则表达式
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1 = "aaa@"; //定义要进行验证的字符串
String str2 = "aaaaa";
String str3 = "1111@111sdsd.sds.com";
if(str1.matches(regex)){ //判断字符串变量是否与正则表达式匹配
System.out.println(str1 + "是一个和合法的E-mail地址格式");
}
if(str2.matches(regex)){ //判断字符串变量是否与正则表达式匹配
System.out.println(str2 + "是一个和合法的E-mail地址格式");
}
if(str3.matches(regex)){ //判断字符串变量是否与正则表达式匹配
System.out.println(str3 + "是一个和合法的E-mail地址格式");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
七、字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。而java中有可变字符序列String-Builder类,大大提高了频繁增加字符串的效率。
1、append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接收任何类型的数据。
语法如下:
append(content)
2、insert(int offset,arg)方法
该方法用于向字符串生成器中指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入基本数据类型或对象。
语法如下:
insert(int offset arg)
实例:
public class Test {
public static void main(String[] args) {
StringBuilder bf = new StringBuilder("hello");//创建字符生成器
bf.insert(5,"word"); //添加至字符生成器的内容
System.out.println(bf.toString()); //此时输出信息为helloword
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3、delete(int start,int end)方法
移除此序列的字符串中的字符。该字符串从指定的start处开始,一直到索引end-1处的字符串,如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。
语法如下:
delete(int start, int end)
例如:
public class Test {
public static void main(String[] args) {
StringBuilder bf = new StringBuilder("StringBuilder");//创建字符生成器
bf.delete(5,10); //删除的子字符串
System.out.println(bf.toString()); //此时输出信息为Stringder
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
八、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
文章来源: xiaoqijava.blog.csdn.net,作者:旷世奇才李先生,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoqijava.blog.csdn.net/article/details/125821226
- 点赞
- 收藏
- 关注作者
评论(0)