Day010---java中的字符串处理,字符串格式化及日期格式化。

目录

一,String类

1,String类创建对象

2,字符串与某个类的实例对象的连接

 3,字符串的操作

 1)equals()比较字符串

 2)regionMatches()比较字符

 3)startsWith()和endsWith()比较字符

 3)compareTo()方法比较字符串

 4,length()获取字符串长度

 5,toUpperCase()和toLowerCase()字符串大小写转换

 6,indexOf及lastIndexOf()查找字符串

1)无指定搜索起点

 2)有指定搜索起点

 7,substring()获取字符串的子字符串

 8,replace()替换字符串及trim()去除字符串首尾的空格

1)replace()替换字符

 1)replaceAll()替换字符

 2)trim()去除字符串首尾的空格

9,split()方法分割字符串

 10,%s/c/d/f/n/b格式化字符串

11,%tx日期和时间字符串格式化

12,DateFormat与SimpleDateFormat方法格式化日期/时间

1,使用format()方法格式化Date对象

 2,使用parse()方法解析字符串成Date日期

 ♣日期综合应用---用户输入日期,程序输出日期的下一分钟。

 13,StringBuilder类创建字符串


 

一,String类

在java中,字符串是string类的实例,即字符串对象。我们如果以对象的方式进行字符串的处理,那么就将会使字符串更加灵活,方便。

1,String类创建对象

在java中可以像创建其他类的对象一样创建字符串对象。java使用的是java.lang包下的String类来(new)创建对象---字符串对象。new关键字用于创建指定类的实例对象,在java中对象必须先初始化才能使用。String类有5种构造方法,如下

1,String( )---无参构造方法。使用该构造方法时如果不往里面添加任何字符串,那么就默认不包含任何字符【不包含字符串≠null(空值)                  ଘ(੭ˊᵕˋ)੭创建对象:String 对象名=new String();

2,有参的String类构造方法里面可以传入字节型数组,字符型数组,或者说由缓冲字符串,字符串生成器创建的字符串。

  • 字节型数组作为参数传入         ଘ(੭ˊᵕˋ)੭创建对象String  对象名=new  String(bytes[]  bytes);

  •  字符型数组作为参数传入        ଘ(੭ˊᵕˋ)੭创建对象String  对象名=new  String(bytes[]  bytes);

2,字符串与某个类的实例对象的连接

java中的所有类都是Object类的子类,直接或间接的继承了Object类的方法,其中包括toString()方法---将对象转变成字符串。

 接下来我们一步一步的讲解:

首先先创建一个水果类,里面放进去水果类的属性name

 我们的属性可以设置成private,也可以不设置,设置成private体现了java的封装性,防止外界对内部结构的修改(相关知识在Day008),如果想要外界修改的话,我们可以提供一个public接口来让外界访问和修改我们的私有化属性。所以这里我们就不写private了,让外界直接访问,相应的公有接口就不用去编写了,只需要去编写(重写toString方法)如下:

 接着我们去主方法中去实例化一个Fruit类的对象,并给它的属性赋值:

 之后我们使用字符串与之连接,并输出打印。

 结果如下:

如上我们能够将对象与字符串连接,主要是因为我们重写了toString方法,如果我们不重写toString方法,那么对象打印出来的就是创建该对象的类的全路径名称和内存地址,如下:

我们将重写t(覆盖)toString的代码注释掉

 打印输出的结果如下:

 3,字符串的操作

 1)equals()比较字符串

由于字符串时对象类型,所以我们不能简单(单纯)的使用“==”(双等号)判断String类的对象是否相等,而需要使用equals()方法比较两个对象的内容,而我们的字符串中存放的字母等都有大小写之分,如果我们需要区分大小写的比较,那么直接使用equals()即可,如果想要忽略大小写的话,可以在equals方法的基础上再加上IgnoreCase(忽略具体情况)→equalsIgnoreCase():

 2)regionMatches()比较字符

region有区域的意思,因此它的作用是选取两个字符串的某个区域的字符进行对比。

定义:一个字符串的子字符串(指定长度)与另外一个字符串的子字符串(指定长度)之间的比较

基本格式:regionMathes(toffeset,other,ooffeset,len)---offeset有出发的意思。

  • toffeset:此字符串对象的子字符串开始处的索引号
  • other:要比较字符串对象
  • ooffeset:要比较的字符串对象的子字符串开始处的索引号
  • len:要比较的字符串的长度

此方法有着可以忽略字母大小写的另外一种表示在该方法中的最前面加入参数true,表示忽略大小写---其参数名其实是ignoreCase,它的表示为ignoreCase=true。为了方便,我们一般采用简写。

 3)startsWith()和endsWith()比较字符

该方法的返回值和上面两种方法一样,都是Boolean型(true|false),

  1. starsWith(str)---判断字符串是否以指定的内容开始,str参数作为前缀的字符串。
  2. endsWith(str)---判断字符串是否以指定内容结束,str参数作为后缀的字符串。

 3)compareTo()方法比较字符串

此方法用于判断两个字符串间的大于,小于,等于关系。依据:字典中的顺序。

若两个字符串相等,返回0;此字符串小于相比较的字符串,返回负数(小于0);此字符串大于相比较的字符串,返回正数(大于0)。

 4,length()获取字符串长度

字符串是一个对象,在这个对象中包含有length属性,是该字符串的长度,我们直接使用String类中的length()方法就可以获取其属性值。

 5,toUpperCase()和toLowerCase()字符串大小写转换

String类有两个方法来进行字符串大小写的转换

  1. toUpperCase()---将字符串内的所有字符从小写字母改写为大写字母
  2. toLowerCase()---将字符串中的所有字符从大写字母改写为小写字母

 6,indexOf及lastIndexOf()查找字符串

查找字符串有以下两种方法

1)无指定搜索起点

  1. indexOf(str)---搜索字符或字符串首次出现的位置
  2. lastIndexOf(str)---搜索字符或字符串最后一次出现的位置

【若字符没有出现则返回-1】

 2)有指定搜索起点

在原有的两个方法的参数里面加入指定开始的索引号即可,如下:

 7,substring()获取字符串的子字符串

格式:str.substring(start,end)

  • str:获取子字符串的指定字符串
  • start:子字符串在整体字符串中的开始位置
  • end:子字符串在整体字符串的结束位置(end-1)

 8,replace()替换字符串及trim()去除字符串首尾的空格

1)replace()替换字符

 我们的String字符串对象的长度是固定的且它的内容也不能更改和编辑,如果我们直接打印出来str11,效果依旧是没有执行替换的样子:

 因此我们需要再创建一个新的对象来接收新生成的字符串对象。

 1)replaceAll()替换字符

replaceAll()与replace()都是替换字符串里面对应的全部字符的,但是replaceAll()方法中可以使用正则表达式,,而replace()方法只能传入单纯的字符串。

 2)trim()去除字符串首尾的空格

9,split()方法分割字符串

该方法可以按指定的分割字符或字符串,将字符串内容分割并存放到字符串数组中。

格式:str.split(regex)

  • str:一个字符串对象
  • regex:分割字符串的分隔符,也可以使用正则表达式来分割字符串。

【如果字符串中没有统一的的分隔符,可以使用‘|’定义多个分隔符,例如,“,|-|!”分别以‘,’,‘-’和‘!’作为分隔符】。如下,我们使用了‘,’来分割含有‘,’的字符串:

 从上面我们可以看到,经过分割的字符串是保存到数组中的。

接下来我们使用一个综合案例(有兴趣的看看):使用split将字符串里面的数字分割出来【涉及知识点:正则表达式里面的“\\D”---代表任何非数字的字符;Integer.parseInt()---将输入的字符转换成整型。】

 如上:输出字符串里面的数字,其实如果我们的字符串里面的数字是不规律排列的话,就会报错,想要去了解的可以自己去尝试一下。

 10,%s/c/d/f/n/b格式化字符串

格式化字符串相信大家在学习数据类型及输出打印里面就有了解。没错,格式化字符串就相当于使用printf来打印字符串,并且里面使用的是占位符。如我们常见的字符串类型的占位符为“%s”。其他常见的格式化字符串的占位符(转换符)有以下几个:

  1. 字符串:%s    
  2. 字符:%c
  3. 浮点:%f
  4. 布尔:%b
  5. 换行符:%n
  6. 指数:%e
  7. 百分比类型:%%
  8. 十进制:%d
  9. 十六进制:%x
  10. 十六进制浮点数:%a
  11. 八进制:%o
  12. 日期与时间:%tx---x代表不同的日期与时间转换符

搭配转换符的有以下几个:

  1. ‘+’:正数
  2. ‘-’:左对齐
  3. ‘0’:数字前补0
  4. ‘,’:以逗号对数字分组
  5. ‘(’:使用括号包含负数
  6. ‘<’:格式化前一个转换符所描述的参数
  7. ‘$’:被格式化的参数索引,可以指定传入的参数的顺序。

package com.string;
import java.util.Date;
public class StringOpprationEquals {
	public static void main(String[] args) {
		String str1="aBc";
		String str2="AbC";
//equals()及equalsIgnoreCase()
		System.out.println(str1.equals(str2));
		System.out.println(str1.equalsIgnoreCase(str2));


//regionMatches(toffeset,other,ooffser,len)
System.out.println(str1.regionMatches(1,str2,1,1));
		System.out.println(str1.regionMatches(true,1,str2,1,1));

//starsWith()及endsWith()
System.out.println(str1.startsWith("a"));		//判断是否以a开始
		System.out.println(str1.startsWith("c"));		//判断是否以c开始
		System.out.println(str1.endsWith("a"));		//判断是否以a结束
		System.out.println(str1.endsWith("c"));		//判断是否以c结束

System.out.println(str1.compareTo(str2));



//System.out.println("没有进行任何操作的原字符串:"+str1);
		System.out.println("将全部字母改大写后的字符串:"+str1.toUpperCase());
		System.out.println("将全部字母改大写后的字符串:"+str1.toLowerCase());


//indexOf()及lastIndexOf()
	String str11="aBca";
		String str21="AbC";
		int index=str11.indexOf("a");		       //搜索“a”第一次出现的位置
		int indexLast=str11.lastIndexOf("a");	   //搜索‘a’最后一次出现的位置
		int index1=str11.indexOf("d");			   //搜索‘d’第一次出现的位置
		System.out.println("a第一次出现的索引位置:"+index+"\n"+"a最后一次出现的位置:"+indexLast);
		System.out.println("d第一次出现的索引位置:"+index1);

int index=str11.indexOf("a",1);		       //搜索“a”第一次出现的位置
		int indexLast=str11.lastIndexOf("a",1);	   //搜索‘a’最后一次出现的位置
		int index1=str11.indexOf("d",1);			   //搜索‘d’第一次出现的位置
		System.out.println("a第一次出现的索引位置:"+index+"\n"+"a最后一次出现的位置:"+indexLast);
		System.out.println("d第一次出现的索引位置:"+index1);

//substring()
String str11="aBca";
		String str21="AbC";
		System.out.println(str11.substring(1,3));
//从字符串中提取数字
	String strings="b1ab2b3c4d";
		int[] num=new int[strings.length()];
		String[]  stringsArray=strings.split("\\D");
/*		for(String i:stringsArray){
			System.out.print(i+"");
			
		}*/
		
		for(int i=0;i<stringsArray.length-1;i++){
			num[i]=Integer.parseInt(stringsArray[i]);
			System.out.print(num[i]+"  ");
		}


//格式化字符串的转换符(占位符)
String str1="我是个字符串";
		char c1='c';
		boolean b1=false;
		int i1=20;
		double d1=99.9000;
		float  f1=99.9000f;
		System.out.printf("字符串型:%s%n字符型:%c%n布尔型:%b%n整型(十进制整):%d%n单精度浮点型:%f%n双精度浮点型:%f%n",str1,c1,b1,i1,f1,d1);

//搭配转换符的标志
System.out.printf("负数的显示正号:%+d%n",-1);	   //负数的显示正号
		System.out.printf("正数的显示正号:%+d%n",1);	   //正数的显示正号
		System.out.printf("有左对齐(向左看):%-5d,a%n", 2); //有左对齐(向左靠)
		System.out.printf("无左对齐:%5d,a%n", 2);  //无左对齐,有右对齐(向右靠)
		System.out.printf("不足左补空:%4d%n", 99);     //不足左补空
		System.out.printf("不足左补0:%04d%n",99);	  //不足左补0
		System.out.printf("使用(来包含负数:%(d%n", -5);   //使用(来包含负数,不显示负号
		System.out.printf("浮点数:%2$f     整数:%1$d",66,6.6);	//$被格式化的参数索引
	}
}

11,%tx日期和时间字符串格式化

首先我们要先创建日期对象,如下:

 出现爆红,主要原因是我们没有导入Date类包,接下来我们去导入Date类。

 处理日期和时间格式的转换符--%tx-------------x另外的转换符。x对应的转换符如下:

  1. 输出包括全部日期和时间的信息 --》c
  2. 输出年月日的格式:年-月-日------》F
  3. 输出年月日的格式:年/月/日------》D
  4. 输出12时制的时间(精确到秒)---》r
  5. 输出24时制的时间(精确到秒)---》T
  6. 输出24时制的时间(精确到分)---》R

上面的%tc输出的CST的意思为China Standard Time(中国标准时间)。如果是其他国家的时区,有不同的表达:

  • GMT:GreenWitch Mean Time(格林威治标准时间)--本初子午线被定义在通过那里(英国伦敦郊区)的经线。
  • UTC:Universal  Time/Temps  Cordonne(世界标准时间)

【GMT+8|UTC+8=CST】

12,DateFormat与SimpleDateFormat方法格式化日期/时间

 如上,当x=D时,输出的日期是倒着的,如果我们想要将它转变成我们想要的字符串,就可以去使用DateFormat抽象类或者是SimpleDateFormat类来格式化Date。

DateFormat(位于java.text下)是日期/时间格式化子类的抽象类,虽然是SimpleDateFormat的父类,但是其功能有限,毕竟只是给别人继承用的,因此自身的功能就不会很多,如果子类想要更多的方法功能的话可以自己去创建。值得注意的就是在DateFormat中常使用的getInstance()和getDateInstance(),及getTimeInstance()方法(获取DateFormat实例)返回的都是SimpleDateFormat对象。如果要使用DateFormat的话我们是不能直接去new的,可以使用它的子类SimpleDateFormat或者是其下getDateInstance()方法来创建格式化工具,而上面两个方法的区别在于后者可以指定语言环境:加入Locale参数(位于java.util.Locale)。如下代码:

上面也提到了,获取到的DateFormat实例都是SimpleDateFormat对象,而我们SimpleDateFormat它允许进行对我们的数据进行格式化,解析。

  1. 格式化:将我们输入的Date日期按照指定的模式格式化为符合模式的字符串
  2. 解析:将我们输入的字符串把符合模式的字符串解析为Date日期

1,使用format()方法格式化Date对象

1)使用DateFormat下的getDateInstance()返回SimpleDateFormat对象

 在getDateFormat方法中的参数FULL意思为全指定日期(类似于%tc)输出星月日,时区年。

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class StringDate {
public static void main(String[] args) {
	//格式化日期和时间
	Date date =new Date();			//创建日期对象
DateFormat df=DateFormat.getDateInstance(DateFormat.FULL,Locale.US);
String string=df.format(date);		//格式化Date日期
System.out.println("使用美国的语言环境来进行表示当前时间:\t"+date);
df=DateFormat.getDateInstance(DateFormat.FULL,Locale.JAPAN );
System.out.println("使用日本的语言环境来进行表示当前时间:\t"+df.format(date));
}
}

 2)使用SimpleDateFormat(位于java.text下)对象来创建格式化工具

如上,我们在创建格式化工具时顺便指定了给格式的模式为“xxxx年xx月xx日” ,因为我们的SimpleDateFormat继承自DateFormat,因此我们可以创建一个引用DateFormat类的SimpleDateForma对象(即多态),如下,输出和上面一样的结果

import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
public class SimpleDateFormat01 {
	public static void main(String[] args) {
		Date date=new Date();
		DateFormat df=new SimpleDateFormat("yyyy年MM月dd日");
		String str=df.format(date);
		System.out.println(str);
	}
}

 2,使用parse()方法解析字符串成Date日期

 出现如上问题我们抛异常即可,在主方法后面加上: throws ParseException---快捷方式:将鼠标放到爆红处,出现选项“Add throw declaretion”,选择这个选项即可。或者是使用try-catch.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;
public class SimpleDateFormat02 {
	public static void main(String[] args) throws ParseException {
		Scanner sc=new Scanner(System.in);
		System.out.print("请输入您的出生日期(xxxx年xx月xx日):");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
		String birthday=sc.next();
		Date  date=sdf.parse(birthday);
		System.out.println(date);
	}
}

 ♣日期综合应用---用户输入日期,程序输出日期的下一分钟。

import java.util.Scanner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
public class TestTime {
	public static void main(String[] args) throws ParseException {
		Scanner sc=new Scanner(System.in);
		System.out.print("请输入日期(格式:yyyy/MM/dd HH:mm:ss):");
		String scDate=sc.nextLine();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		Date date=sdf.parse(scDate);
//		System.out.println(date);
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.MINUTE, 1);
		Date newDate=calendar.getTime();
		String formatDate=sdf.format(newDate);
		System.out.println("当前时间的下一分钟的时间为:"+formatDate);
	}

}

 13,StringBuilder类创建字符串

StringBuilder意思即为字符串生成器,大家会说,我们可以使用String类来创建字符串对象,为啥要再多一个StringBuilder类来创建字符串呢?其实主要原因是因为:

  1. String类字符串对象本身是不可变的,且它的长度是固定的以及内容不能改变和编辑,每次使用‘+’连接符来连接并生成新的字符串(指针指向新的String对象),都要在内存中创建新的字符串对象,并为该对象分配新的空间在字符串执行重复修改的情况下,这样不断的创建新的字符串对象,将会极大的增大系统的开销。
  2. 而StringBuilder类可以动态地更改字符串的内容,每次改变StringBuilder如果有要频繁的执行字符串操作,使用StringBuilder类会让字符串的执行效率大大提高。

创建字符串生成器可以通过三种不同的构造方法实现:

  1. StringBuilder():此构造方法将创建一个空的字符串生成器,初始容量为16字符。
  2. StringBuilder(int capacity):capacity定义了字符串生成器的初始容量
  3. StringBuilder(String str):使用指定的字符串创建并初始化一个字符串生成器,初始内容就是指定的字符串内容。

如上,我们没有给sb和sb1对象传入内容,因此它们的初始内容都为默认为空。 我们也知道字符串生成器是可以动态的对字符串内容进行修改的,所以字符串生成器里面是有几种方法可以让我们的对字符串进行更改(增删插长)。

  1. 增-append()方法可以在字符串的末尾处追加内容,有多个重载方法,可以接受任何类型的数据,甚至是一个字符串生成器。
  2. 删-delete(int  start,int end )方法可以从字符串生成器中删除start到end-1指定范围的子字符串,deleteCharAt(int index )方法可以删除字符串生成器中指定索引位置的字符
  3. 插-insert(int  offset,arg)方法向字符串生成器中指定的位置插入数据内容,可以是数据类型也可以是字符串生成器。
  4. 长-length()方法可以返回字符串生成器中内容的长度

在StringBuilder中如果添加(附加)的内容超过了字符串生成器的可容纳的长度时,它会自动的增加容量来容纳附加的内容。如下:

 通过以上代码的实现,相信大家也看到,我们在对字符串生成器进行修改时,是没有再去创建一个新的对象来接收的,都是在原有的基础上进行修改。因此字符串生成器对字符的处理更加灵活。

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值