第十章 字符串

10.1 String类

单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中。String通常被称为字符串,一个String对象最多可以保存(2^32-1)个字节(占用4GB空间大小)的文本内容。

10.1.1 声明字符串

在Java语言中,字符串必须包含在一对双引号(“”)之内。例如:

“23,23”、“ABCD”、“你好”

以上这些都是字符串的常量,字符串常量可以是系统能够显示的任何文字信息,甚至可以是单个字符。

10.1.2 创建字符串

在Java语言中,将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。

创建对象要使用类的构造方法。String常用的构造方法如下:

String a;

a="hello";

System.out.println(a);

//new String("内容")

String c;

c=new String("word");

System.out.println(c);

//new String(char类型数组)

char[]ch1= {'a','b','c','d'};

String b=new String(ch1);

System.out.println(b);

//new String(char类型数组,前索引,截取的长度(数量))

char[] ch2= {'a','b','c','d','e','f','g','h'};

String d=new String(ch2,2,4);

System.out.println(d);

}

}

 结果:

10.2 连接字符串 

对于已声明的字符串,可以对其进行相应的操作,连接字符串就是字符操作中较简单的一种。可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接。

10.2.1 连接多个字符串

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

例题代码:

public class Join {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a=new String("春色绿千里");//声明String对象
		String b=new String("马蹄香万家");//声明String对象
		String s =a+"\n"+b;//将对象a和b连接并将结果赋值给s
		System.out.println(s);//将s输出

	}

}

结果:

 10.2.2 连接其他数据类型

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

public class Link {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int booktime=4;//声明int型变量booktime
		float practice =2.5f;//声明float型变量practice
		//将字符串与整形、浮点型变量相连,并将结果输出
		System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时上机练习");
	}

}

结果:

注意:只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,所以应谨慎的将其他数据类型的数据与字符串相连,以免出现意想不到的结果。 

10.3 获取字符串信息

符串作为对象,可通过相应方法获取字符串的有效信息,如获取某字符串的长度、某个索引位置的字符等。

10.3.1 获取字符串长度

结果:

10.3.2 字符串查找

tring种法,即indexOfO与lastIndexOfO方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置, lastIndexOfO方法返回的是搜索的字符或字符串最后一次出现的位置。

结果:

 例题代码:

public class Test {//创建类

 public static void main(String[] args) {//主方法
  // TODO Auto-generated method stub
  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 获取指定索引位置的字符

结果:

  

例题代码:

public class Ref {//创建类

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

}

结果:

10.4 字符串操作

String类中包含了很多方法,允许程序员对字符串进行操作来满足实际编程中的需要。本节将讲解几种常见的字符串操作。
10.4.1获取子字符串
通过String类的substring0)方法可对字符串进行截取。substring0方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从 0开始的。

 结果:

10.4.2 去除空格

trim()方法返回字符串的副本,忽略前导空格和尾部空格

 结果:

10.4.3 字符串替换

replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。

结果:

10.4.4 判断字符串的开始与结尾

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

 结果:

10.4.5 判断字符串是否相等

对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不相同的,使用比较运算符仍然会返回false。因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsgnorecase()方法。

 例题代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		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+"equalslgnoreCase"+s2+":"+b2);//输出信息
	}

}

结果:

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

abc equalsIgnoreCase ARC :true 
字符串中各个字符的Unicode 值,鞍字典顺岸蒋3tg对象表示 compareTo()方法为按字典顺序比第两个字籍事该比较基于图10.14例10.9的运行结果的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String对象位于参数字符之前,则比较结果为一个负整数;如果按字典顺序此 String数字之后,则比较结果一个正整数;如果这两个字符串相等,则结果为 0。语法如下: 
str.compareTo(String otherstr) 
其中,str、otherstr是要比较的两个字符串对象。 

结果:

10.4.7 字母大小写转换

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

结果:

10.4.8 字符串分割

使用split方法可以使字符串按指定的分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了以下两种字符串分割形式。

没有统一的对字符进行分割的符号。如果想定义多个分割符,可使用符号“|”。例如,“,|=”表示分割符分别为“,”和“=”。

10.5格式化字符串

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

1、format(String format,Object.….args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地数:的语言环境。语法如下:
str.format(StringformatObject...args)
2.format(Local IStringformatObject….args)
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用其指定的语言环境。语法如下:
str.format(Local lStringformatObject..args)
10.5.1 日期和时间字符串格式化
在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式,一般需要纻写大量的代码、经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

1.日期格式化 

2.时间格式化

 3.格式化常见的日期时间组合

10.5.2 常规类型格式化

常规类型格式化可应用于任何参数类型

public static void main(String[] args) {
		// TODO Auto-generated method stub
		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 使用正则表达式 

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

 

例题代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";//定义要匹配E-mail地址的正则表达式
		String str1="aaa@";//定义要进行验证的字符串
		String str2="aaaaaa";
		String str3="1111@1111ffyu.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 实例,会在内存中创建新的字符串对象。t重复地对字符串进行修改,将极大地增加系统开销。而JDK新增了可变的字符序列 StringBuilder类大大提高了频繁增加字符串的效率。

 

 

例题:

 
		public class Jerque {
 
			 public static void main(String[] args) {
			  // TODO Auto-generated method stub
			  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);
			 }
 
			
	}
 
 

结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值