第十章总结(字符串)

10.1 String 类

10.1.1 声明字符串

在java语言中,字符串必须包含在一对双引号("  ")之内。
在Java中由双引号(" ")包围的都是字符串,不能作为其他数据类型来使用。
可以通过String str;语句来声明字符串变量。String:指定该变量为字符串类型。str:任意有效的标识符,表示字符串变量的名称。
声明的字符串变量必须经过初始化才能使用,否则编译器会报出“变量未被初始化错误”。

10.1.2 创建字符串

	在Java语言中,将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法。

在这里插入图片描述

10.2 连接字符串

10.2.1 连接多个字符串

使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个String对象并产生一个新的String对象。

例 10.1先连接一幅对联的上、下联,再分行输出在控制台上

代码为:`

public class Join {								//创造类
	public static void main(String[] args) {	//主方法
		String s1 = new String("春风绿千里");		//声明String对象s1
		String s2 = new String("马蹄香万家");		//声明String对象s2
		String s =s1 +"\n"+s2;					//将对象s1、"/n"和对象s2连接并结果赋值给s
		System.out.println(s);					//将s输出
	}

}

结果为:
在这里插入图片描述

10.2.2 连接其他数据类型

字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型数据进行连接,会将其他数据类型的数据直接转换成字符串。

例 10.2 统计每天的阅读和上机时间

代码为:

public class Link {								//创建类
	public static void main(String[] args) {	//主方法
		int booktime = 4;						//声明的int型变量booktime
		float practice = 2.5f;					//声明的float型变量practice
		//将字符串与整型、浮点型变量相连,并将结果输出
		System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时上机练习");
	}
}

结果为:
在这里插入图片描述

10.3 获取字符串信息

10.3.1 获取字符串长度

使用Sring类型的length()方法可获取声明的字符串对象的长度。语法:str.length();
其中,str为字符串对象

10.3.2 字符串查找

1、indexOf(String s)
该方法用于放回参数字符串s在指定字符串中首次出现的索引位置。当调用String类的indexOf()方法时,会从当前字符串的开始位置搜索s的位置。如果没有检索到字符串s,该方法的返回值是-1。
语法:indexOf(substr)
str:任意字符串对象。
substr:要搜索的字符串。

2.lastlndexOf(String str)
该方法用于指定字符串最后一次出现的索引位置。当调用String类的lastlndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1。语法:str.lastIndexOf(substr)
str:任意字符串
substr:要搜索的字符串

例3:用两种方式判断字符串的长度

代码为:

public class Text {												//创造类
	public static void main(String[] args) {					//主方法
		String str = "We are students";							//定义字符串str
		int size = str.lastIndexOf("");							//将空字符串在str中的索引位置赋值给变量size
		System.out.println("空字符串在字符串str中的索引位置是:"+size);	//将变量size输出
		System.out.println("字符串str的长度是:"+str.length());		//将字符串str的长度输出
	}

}

结果为:
在这里插入图片描述

10.3.3 获取指定索引位置的字符

使用charAt()方法可将指定索引处的字符返回。语法如下:

str:

任意字符串。

index:

整型值,用于指定要返回字符的下标。

例4:查看指定索引位置上的字符

代码为:

public class Ref {												//创造类
	public static void main(String[] args) {					//主方法
		String str = "hello world";								//定义字符串str
		char mychar = str.charAt(6);							//将字符串str中索引位置6的字符返回
		System.out.println("字符串str中索引位置是6的字符为:"+mychar);	//输出信息
	}
}

结果为:
在这里插入图片描述

10.4 字符串操作

10.4.1 获取子字符串

1.获取子字符串
通过String类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。

1.substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。语法如下:
str.substring(int beginlndex)
其中,beginlndex指定从某一索引处开始截取字符串。
2.substring(int beginlndex,int endlndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串,代码如下:
substring(int beginlndex,int endlndex)
beginlndex:开始截取子字符串的索引位置。
endlndex:子字符串在整个字符串中的结束位置。

例5:《将进酒》的作者是哪位诗人?

代码为:

public class Subs {										//创建类
	public static void main(String[] args) {			//主方法
		String str = "《将进酒》:李白(唐)";					//定义字符串
		String substr = str.substring(6,8);				//对字符串进行截取
		System.out.println("《将进酒》的作者是"+substr);		//输出截取后的字符串
	}
}

结果为:
在这里插入图片描述

10.4.2 去除空格

trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下:
str.trim
其中,str为任何字符串对象。

例6:去掉字符首、尾的空格

代码为:

public class Blak {												//创建类
	public static void main(String[] args) {					//主方法
		String str = "  java  class   ";						//定义字符串str
		System.out.println("字符串原来的长度:"+str.length());		//将str原来的长度输出
		System.out.println("去掉空格后的长度:"+str.trim().length());
	}

}

结果为:
在这里插入图片描述

10.4.3 字符串替换

replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。
语法:str.replace(CharSequence target,CharSequence replacement)
1.targt: 要替换的字符或字符串。
2.replacement:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符或字符串 oldChar 没有出现在该对象表达式中的字符串序列中,则将原字符串返回。

例7:将单词中的字母a替换为字母A

代码为:

public class NewStr {								//创建类
	public static void main(String[] args) {		//主方法
		String str = "address";						//定义字符串str
		String newstr = str.replace("a", "A");		//将str中"a"替换成"A"并返回新字符串newstr
		System.out.println(newstr);					//将字符串newstr输出
	}

}

结果为:
在这里插入图片描述

10.4.4.判断字符串的开始和结尾

startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。

1.startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法:str.startsWith(String prefix)
其中,prefix是指作为前缀的字符串。

2.endsWith()方法
该方法用于判断当前字符串是否为给定的子字符串。语法:str.endsWith(String suffix)
其中,suffix是指作为后缀的字符串。

例8:判断字符串是否以指定的内容开始或结束

代码为:

public class StartOrEnd {									//创造类
	public static void main(String[] args) {				//主方法
		String num1 = "22045612";							//定义字符串num1
		String num2 = "21304578";							//定义字符串num2
		boolean b = num1.startsWith("22");					//判断字符串num1是否以‘22’开头
		boolean b2 = num2.endsWith("78");					//判断字符串num2是否以‘78‘结束
		System.out.println("字符串num1是以'22'开始的吗?"+b);
		System.out.println("字符串num2是以'78'结束的吗?"+b2);	//输出信息
	}

}

结果为:
在这里插入图片描述

10.5.5.判断字符串是否相等

对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false。
此时,布尔型变量b的值为false,因为字符串是对象,tom、jerry是引用。
因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。

1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true。否则返回false。
语法:str.equals(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。

2.equalsLgnoreCase()方法
使用equals()方法对字符串进行比较时是否分大小写的,而使用equalsLgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:
str.equalsLgnoreCase(String otherstr)
其他,str、otherstr是要比较的两个字符串对象。

例9:判断“abc”与“ABC”是否相等

代码为:

public class Opinion {											//创造类
	public static void main(String[] args) {					//主方法
		String s1 = new String("abc");							//创建字符串对象s1
		String s2 = new String("ABC");							//创建字符串对象s2
		boolean b = s1.equals(s2);								//使用equals()方法比较s1与s2
		boolean b2 = s1.equalsIgnoreCase(s2);					//使用equalsIgnoreCase()方法比较s1与s2
		System.out.println(s1+ " equals " +s2 +":"+ b);			//输出信息
		System.out.println(s1+ " equalsIgnoreCas "+s2+":"+b2);
	}

}

结果为:
在这里插入图片描述

10.4.6.按字典顺序比较两个字符串

compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。语法如下:
str.compareTo(String otherstr)
其中,str、otherstr是要比较的两个字符串对象。

例10:判断字母b的位置

代码为:

public class Wordbook {							//创造类
	public static void main(String[] args) {	//主方法
		String str = new String("b");			//用于比较的3个字符串
		String str2 = new String("a");
		String str3 = new String("c");
		System.out.println(str + " compareTo " + str2 +":"+str.compareTo(str2));
		//将str与str2比较的结果输出
		System.out.println(str + " compareTo " + str3 +":"+str.compareTo(str3));
		//将str与str3比较的结果输出
	}

}

结果为:
在这里插入图片描述

10.4.7.字母大小写转换

String类的toLowerCase()方法可将字符串中的所有大小字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。

1.toLowerCase()方法
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度不变。语法如下:
str.toLowerCase()
其中,str是要进行转换的字符串。

2.toUpperCase()方法
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换为大写,字符串长度不变,语法如下:
str.toUpperCase()
其中,str是要进行转换的字符串。

例11:字母大小写转换

代码为:

public class UpAndLower {							//创造类
	public static void main(String[] args) {		//主方法
		String str = new String("Oh My God");		//创建字符串str
		String newstr = str.toLowerCase();			//使用toLowerCase()方法实行小写转换
		String newstr2 = str.toUpperCase();			//使用toUpperCase()方法实行大写转换
		System.out.println(newstr);					//将转换后的结果输出
		System.out.println(newstr2);
	}

}

结果为:
在这里插入图片描述

10.4.8.字符串分割

使用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: 限制的分割次数。

例12:按要求分割“192.168.0.1”

代码为:

public class Division {									//创造类
	public static void main(String[] args) {			//主方法
		String str = "192.168.0.1";						//创建字符串
		String[] firstArray = str.split("\\.");			//按照“.”进行分割,使用转义字符“\\.”
		String[] secondArray = str.split("\\.",2);		//按照“.”进行再次分割,使用转义字符“\\.”
		System.out.println("str的原值为:["+ str +"]");	//输出str原值
		System.out.print("全部分割的结果:");				//输出全部分割的结果
		for(String a:firstArray) {
			System.out.print("["+a+"]");
		}
		System.out.println();							//换行
		System.out.print("分割两次的结果:");				//输出分割两次的结果
		for(String a:secondArray) {
			System.out.print("["+a+"]");
		}
		System.out.println();
	}

}

结果为:
在这里插入图片描述

10.5格式化字符串

Sting 类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。

1…format(String format,Object…args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。语法:str.format(String format,Object…args)
format:格式字符串。

args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

2.format(Local l,String format,Object…args)
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符串便用其指定的语言环境。语法:str.format(Local l,String format,Object…args)

l:格式化过程中要应用的语言环境。如果1为null,则不进行本地化。

format:格式字符串。

args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

10.5.1.日期和时间字符串格式化

在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式,一般需要编写大量的代码、经过各种算法才能实现。formatI()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。
1.日期格式化
在这里插入图片描述

例13:按照格式输出今天的年、月、日

代码为:

import java.util.Date;								//导入java.util.Date类
public class Eval {									//新建类
	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+"号");
	}

}

结果为:
在这里插入图片描述
2.时间格式化
使用 format()方法不仅可以完成日期的格式化也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒等。
在这里插入图片描述

例14:按照格式输出当下的时、分、秒

代码为:

import java.util.Date;									//导入java.util.Date类
public class GetDate {									//新建类
	public static void main(String[] args) {			//主方法
		Date date = new Date();							//创建Date对象date
		String hour = String.format("%tH",date);		//将date进行格式化
		String minute = String.format("%tM",date);
		String second = String.format("%tS",date);
		System.out.println("现在是:"+hour+"时"+minute+"分"+second+"秒");
		//输出的信息
	}

}

结果为:
在这里插入图片描述
3.格式化常见的日期时间组合
格式化日期与时间组合的转换符定义了各种日期时间组合式,其中常见的如图所示。
在这里插入图片描述

例15:按照格式输出当下的年、月、日

代码为:

import java.util.Date;								//导入java.util.Date类
public class DateAndTime {							//新建类
	public static void main(String[] args) {		//主方法
		Date date = new Date();						//创建Date对象date
		String time = String.format("%tc", date);	//将date格式化
		String form = String.format("%tF", date);
		System.out.println("全部的时间信息是:"+time);	//将格式化后的日期时间输出
		System.out.println("年-月-日格式:"+form);
	}

}

结果为:
在这里插入图片描述

10.5.2.常规类型格式化

常规类型格式化可应用于任何参数类型,可通过表中的转换符来实现。
在这里插入图片描述

例16:使用转换符获取表达式的结果

代码为:

public class General {								//新建类
	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("400的一半是:"+str);		//输出格式化字符串
		System.out.println("3>5正确吗:"+str2);
		System.out.println("200的十六进制数是:"+str3);
	}

}

结果为:
在这里插入图片描述

10.6 使用正则表达式

正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有-些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。例如,“\d”表示数字0~9中的任何一个,“\d”就是元字符。正则表达式中的元字符及其意义如表中所示。

在这里插入图片描述
在正则表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字特可代表方括号中的任何一个字符。例如,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]]: 代表字母 d、e、f (交运算)。

6.[a-d&&[bc]]: 代表字母a、d (差运算)。

在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如:“A*”代表A可在字符串中出现0次或多次。限定修饰符的用法如表所示。
在这里插入图片描述

例:17验证E-mail地址是否“合法”

代码为:

public class Judge {											//新建类
	public static void main(String[] args) {					//主方法
		String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";	
		//定义要匹配E-mail地址的正则表达式
		String str1 = "aaa@";									//定义要进行验证的字符串
		String str2 = "aaaaa";
		String str3 = "1111@111ffyu.dfg.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地址格式");
	}

	}
}

结果为:
在这里插入图片描述

10.7.字符串生成器

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 String 实例,会在内存中创建新的字符串对象。如重复地对字符串进行修改,将极大地增加系统开销。而JDK 新增了可变的字符序列 StringBuilder类大大提高了频繁增加字符串的效率。

例18:效率比拼

代码为:

public class Jerque {
 
	public static void main(String[] args) {
		String  str="";//创建空字符串
		long StarTime=System.currentTimeMillis();//获取字符串执行前的时间
		for(int i=0;i<10000;i++) {//循环追加字符串
			str=str+i;
			
		}
		long endTime=System.currentTimeMillis();//获取字符串执行后的时间
		long time=endTime-StarTime;//计算时间差
		System.out.println("string消耗的时间:"+time);//输出
		StringBuilder builder=new StringBuilder("");//创建字符串生成器
		 StarTime=System.currentTimeMillis();//获取字符串执行前的时间
		 for(int j=0;j<10000;j++) {//循环追加字符串
				builder.append(j);
				
			}
		 endTime=System.currentTimeMillis();//获取字符串执行后的时间
		 time=endTime-StarTime;//计算时间差
		 System.out.println("stringBuilder消耗的时间:"+time);//输出
	}
}

结果为:
在这里插入图片描述
1.append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char、String、double 或者另一个字符串生成器等。语法如下:
append(comtemt)
其中,content表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。
2.insert(int offset, arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char 和 boolean 等基本数据类型的数据或其他对象。语法如下:
insert(int offset, arg)
ofset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度。

arg:将插入至字符串生成器的位置。该参数可以是任何数据类型的数据或其他对象。
3.delete(int start , int end)方法
移除此序列的子字符串中的字符。该子字符串从指定的 stat 处开始,一直到索引 end-1 处的字符如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改。语法如下:
delete(int start , int end)

1.start: 将要删除的字符串的起点位置。
2. end:将要删除的字符串的终点位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值