6.1 String类
6.1.1声明字符串
在Java中,字符串必须包含在一对(””)中。
语法:String str;
String:指定该变量为字符串类型
str:任意有效的标识符,表示该字符串变量的名称。
6.1.2创建字符串
1、String(char a[])用一个字符数组a来创建String对象
char a[]={‘g’,‘o’,‘o’,‘d’};
String s=new String(a);
等价于String s=new String(“good”);
2.String(char a[],int offset,int length)
提取字符数组a的一部分来创建一个字符串对象
char a[]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’}
String s=new String (2,4);
等价于String s =new String(“uden”);
3、String(char []value)
该构造方法可以分配一个新的String对象,使其表示字符串数组参数中所有元素连接的结果。
char a[]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’};
String s =new String(a);
等价于String s=new String(“student”);
4、除了通过以上几种使用String类的构造方法来创建字符串变量外,还可以通过字符串常量引用赋给一个字符串变量。
String str1,str2;
str1=“We are student”;
str2=“We are student”;
此时str1与str2有相同的字符串常量,因此具有相同的实体。
字符串连接时字符串操作中比较简单的一种,可以是多个字符串连接,也可以是字符串与其他数据类型进行连接。
6.2.1连接多个字符串
使用“+”号运算符可以实现连接多个字符串的功能,“+”运算符可以连接多个运算符并产生一个String对象。
6.2.2连接其他数据类型
字符串也可同其他的基本数据类型进行连接,如果将字符串同这些数据类型的数据进行连接,会将这些数据转换为字符串。
【例】创建类link,在主方法中创建数值型变量,实现将字符串与整形、浮点型变量相连的结果输出。
public class text_06 {
public static void main(String[] args) {
int booktime=4;//声明一个int型变量booktime
float practice=2.5f;//声明一个float型变量practice
//将相连的结果输出
System.out.println("我每天花费"+booktime+"小时看书,"+practice+"小时上机练习!");
System.out.println("我每天花费"+booktime+"小时看书,"+(booktime+practice)+"小时上机练 习!");
}
}
6.3获取字符串信息6.3.1获取字符串长度
使用String类的length()方法,可以获取声明的字符串对象的长度。语法:
str.length();
【例】获取字符串长度
String str=”we are family”;
int z=str.length();
6.3.2字符串查找
String类提供了两种查找字符串的方法,即indexOf()和lastIndexOf()方法。这两中方法都允许在字符串中搜索指定条件的字符或字符串。IndexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是字符或字符串最后一次出现的位置。
1、indexOf()方法
语法:str.indexOf(substr);
str:任意字符串对象
substr:要查找的字符串
【例】 String str=”we are student”
int size=str.indexOf(a);//变量size的值是3
在计算机中,String对象是用数组表示的。字符串的下标0~length()-1。
2.lastIndexOf(String str)
语法:str.lastIndexOf(substr)
str:任意字符串对象
substr:要搜索的字符串
【例】在主方法中创建String对象,使用lastIndexOf()方法查看字符串str
中空字符串的位置,然后输出字符串的长度,看是否相同。
public class text_07 {
public static void main(String[] args) {
String str="we are student";
int size=str.lastIndexOf("");//将空字符串在str中的索引位置赋值给变量size
//将空字符串在str中的索引的位置赋值给变量size
System.out.println("空字符串在str中索引的位置是:"+size);
//将str的长度输出
System.out.println("字符串的长度是:"+str.length());
}
}
6.3.3获取指定索引位置的字符
使用charAt()方法可以将指定索引的字符返回
语法:str.charAt(int index);
str:任意字符串
index:整型值,用于指定要返回的字符的下标
【例】在主方法中,创建String对象,使用charAt()方法查看字符串str中索引是6的字符。
public class text_08 {
public static void main(String[] args) {
String str ="hello world";//定义字符串str
char mychar=str.charAt(6);//将字符串str中索引的位置是6的字符返回
System.out.println("字符串str中索引位置是6的字符为:"+mychar);//输出信息
}
}
6.4字符串操作6.4.1获取子字符串
通过String类的substring()方法可以对字符串进行截取。这些方法的共同点就是利用字符串的下标进行截取,且应明确字符串下标是从0开始的。Substring()方法被两种不同的方法来重载,来满足不同的需求
1、substring(int beginIndex)该方法返回的是从指定的索引位置开始截取到该字符串结尾的子串。语法:str.substring(int beginIndex)
其中,beginIndex指定从某一处开始截取字符串。
【例】String str=“Hello World”;
String s= str.substring(3);//获取子字符串,s的值是lo World
2、substring(int beginIndex,int endIndex)
beginInde:开始截取的子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
【例】创建String对象,实现使用substring()方对字符串进行截取,并将截取后形成的新的字符串输出。
public class text_10 {
public static void main(String[] args) {
String str="hello world";
String substr=str.substring(0,3);//截取字符串
System.out.println(substr);//输出截取后的字符串
}
}
6.4.2去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法:str.trim(),
其中str为任意的字符串对象
public class text_09 {
public static void main(String[] args) {
String str=" java class ";//定义字符串
System.out.println("字符串原来的长度是:"+str.length());
//将str去掉前导和尾部的空格的结果输出
System.out.println("去掉空格后的长度是:"+str.trim().length());
}
}
6.4.3字符串替换
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:
str.replace(char oldChar,char newChar)
oldChar:要替换的字符或字符串
newChar:用于替换原来字符串的内容
replace()方法返回的结果是一个新的字符串,如果字符串oldChar没有出现在该对象表达式的字符串序列中,则将原字符串返回。
6.4.4判断字符串的开始和结尾
startsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或结束,这两个方法返回的值都是boolean型。
1、startWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串
语法:str.startWith(String prefix),其中,prefix是指作为前缀的字符。
2、endsWith()方法
该方法用于判断当前字符串是否是以给定的子字符串结束
语法:str.endsWith(String suffix),其中suffix是指作为后缀的字符串
【例】创建类,在主方法中创建String型变量,并判断变量的前导和后置字符串。
public class text_14 {
public static void main(String args[]) { // 主方法
String num1 = "22045612"; // 定义字符串num1
String num2 = "21304578"; // 定义字符串num2
boolean b = num1.startsWith("22"); // 判断字符串num1是否以'22'开头
boolean b2 = num1.endsWith("78"); // 判断字符串num1是否以'78'结束
boolean b3 = num2.startsWith("22"); // 判断字符串num2是否以'22'开头
boolean b4 = num2.endsWith("78"); // 判断字符串num2是否以'78'结束
System.out.println("字符串num1是以'22'开始的吗?" + b);
System.out.println("字符串num1是以'78'结束的吗?" + b2); // 输出信息
System.out.println("字符串num2是以'22'开始的吗?" + b3);
System.out.println("字符串num2是以'78'结束的吗?" + b4);
}
}
6.4.5判断字符串是否相等
对字符串对象进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同,即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符任然会返回flase。因此比较两个字符串的内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
1、equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true
语法:str.equals(String otherstr)
其中,str和otherstr是要比较的两个字符串对象
2、equalsIgnoreCase()方法
使用equals()方法时,是区分大小写的,而是用equalsIgnoreCase()方法时,忽略大小写,返回的结果任然是boolean类型。语法:str.equalsIgnoreCase(String otherstr);
6.4.6字母大小写转换
字符串的toLowerCase()方法可以将字符串中所有的字符从大写字母改写为小写字母,而toUpperCase()方法可将字符串的小写字母改写为大写字母。
1、toLowerCase()方法
该方法将String转换为小写。如果字符串没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个应该进行转换的字符都转换成等价的小写的字符。字符长度与原字符长度相同。语法:str.toLowerCase(),其中,str是要进行转换的字符串。
2、toUpperCase()方法
该方法将String转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新的字符串,将原字符串中每个该进行大写转换的字符都转换成等价的大写字符。新字符串长度与原字符串长度相等。语法:str.toUpperCase(),其中str是要进行转换的字符串。
6.4.7字符串分割
使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中,split()方法提供了以下两种字符串分割形式。
1、split(String sign)
该方法可以上根据给定的分割对字符串进行拆分。
语法:str.split(String sign);其中,sign为分割字符串的分隔符,也可以使用正则表达式。
2、split(String sign,int limit)
该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。
语法:str.split(String sign,int limit)
Sign:分割字符串的分割符,也可以使用正则表达式。
Limit:限制的分割次数。
【例】创建类,在主方法中创建String型变量,并将字符变量进行分割,将分割后的结果输出。
public class text_11 {
public static void main(String[] args) {
String str="192.168.0.1";//创建字符串
//按照"."进行分割,使用转义字符"\\."
String []firstArray=str.split("\\.");
//按照"."进行两次分割,使用转义字符"\\."
String []secondArray=str.split("\\.",2);
//输出原str的值
System.out.println("str的原值是:["+str+"]");
//输出全部分割的结果
System.out.println("全部分割的结果是:");
for(String a:firstArray){
System.out.print("["+a+"]");
}
System.out.println();
//输出两次分割的结果
System.out.println("两次分割的结果是:");
for(String a:secondArray){
System.out.print("["+a+"]");
}
System.out.println();
}
}
6.5格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式
1、format(String format,Object…args)
format:格式字符串
args:格式化字符串中由格式说明符引用的参数。如果格式说明符以外的参数,则忽略这些额外的参数,参数的数目是可以变的,可以是0。
2、format(Local 1,String format,Object…args)
1:格式化过程中要应用的语言环境。如果1为null,则不进行本地化化
format:格式化字符串
args:格式化字符串中由格式说明符引用的参数,如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的。可以为0。
6.5.1日期格式化
【例】返回一个月的天数。
Date date = new Date();
String s = String format(“%te”,date);
s 的值是当前日期中的天数,%te是转换符。
【例】创建类,实现将当前日期信息以4位年份、月份全称,2位日期形式输出
public class text_12 {
public static void main(String[] args) { // 主方法
Date date = new Date(); // 创建Date对象date
String year = String.format("%tY", date); // 将date进行格式化
String month = String.format("%tB", date);
String day = String.format("%td", date);
System.out.println("今年是:" + year + "年"); // 输出信息
System.out.println("现在是:" + month);
System.out.println("今天是:" + day + "号");
}
}
6.5.2时间格式化
使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化,时间的格式化转换符要比日期转换符更多,更精确。
6.5.3格式化常见的日期时间组合
格式化日期与时间的转换符定义了各种日期时间的组合,其中最常见的日期与时间组合形式如下:
%tF “年-月-日”格式(4位年份) 2008-03-25
%tD “月/日/年”格式(2位年份) 03/25/08
%tc 全部日期信息和时间信息 星期二 三月 25 15:20:00 CST2008
%tr “时:分:秒PM(AM)格式(12时制)” 03:22:06下午
%tT “时:分:秒 格式(24时制)” 15:23:16
【例】在项目中创建类,主方法中实现将当前时间信息以及指定格式的日期信息输出
public class text_13 {
public static void main(String[] args) {
Date date = new Date();//创建对象
String time = String.format("%tc",date);//格式化date
String form = String.format("%tF",date);
//输出格式化的时间信息
System.out.println("全部的时间信息是:"+time);
System.out.println("年-月-日格式的时间是:"+form);
}
}
6.5.4常规类型转换
常规类型的格式化可应用于任何的参数类型。
6.6使用正则表达式
正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式,正则表达式是含有一些具有特殊意义字符的字符串,这些字符串称为正则表达式的元字符。
说明:在正则表达式中,“.”代表任何一个字符,因此在正则表达式中如果要使用普通的“.”字符,必须使用转义字符“\”。
在正则表达式中,可以使用方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如:reg=“[abc]4”,这样的字符串a4,b4,c4都是和正则表达式匹配的字符串。方括号还可以为其他的格式。如:
1、[^456]:代表4,5,6之外的任意字符。
2、[a~r]:代表a~r中任何的一个字母。
3、[a-zA-Z]:可表示任意的一个英文字母
4、[a-e[g-z]]:代表a-e,或g-z中的任何一个字母(并运算)
5、[a-o&&[def]]:代表字母def(交运算)
6、[a-d&&[^bc]]:代表字母a、d(差运算)
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如:“A*”代表A可以在字符串中出现0次或多次
6.7 StringBuilder类
StringBuilder和String类一样,也用来代表字符串,只是由于StringBuilder的内部实现方式和String不同,所以StringBuilder在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际操作上,如果经常要对一个字符进行修改,则使用StringBuilder类要更加合适一些。
6.7.1 StringBuilder对象的创建
1、public StringBuilder()
该方法用于构造一个空串缓冲区,其初始容量是16个字符。
2、public StringBuilder(int capacity)
该方法用来构造一个不带字符,但具有指定初始容量的字符串缓冲区。
3、public StringBuilder(String str)
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容,该字符串的初始容量为16个字符,加上字符串参数的长度。
6.7.2 StringBuilder类常用的方法
1、append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据。语法:append(content),其中content表示要追加的内容,可以是任何数据类型或者其他对象
2、insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容,通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char、boolean等基本数据类型或其他对象。语法:insert(int offset arg)
offset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度
arg:将插入至字符串生成器的位置。该参数可以是任何的数据类型多其他的对象。
3、delete(int start,int end)
移除此序列的子字符串的字符。该字符串从指定的start处开始,一直到索引end-1处的字符,如果不存在这些字符,则一直到序列的尾部。如果start等于end,则不发生任何更改。
语法:delete(int start,int end)
Start:将要删除的字符串的起点位置
End:将要删除的字符串的起点位置