目录
一,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类创建字符串
在java中,字符串是string类的实例,即字符串对象。我们如果以对象的方式进行字符串的处理,那么就将会使字符串更加灵活,方便。
在java中可以像创建其他类的对象一样创建字符串对象。java使用的是java.lang包下的String类来(new)创建对象---字符串对象。new关键字用于创建指定类的实例对象,在java中对象必须先初始化才能使用。String类有5种构造方法,如下
1,String( )---无参构造方法。使用该构造方法时如果不往里面添加任何字符串,那么就默认不包含任何字符【不包含字符串≠null(空值) ଘ(੭ˊᵕˋ)੭创建对象:String 对象名=new String();
2,有参的String类构造方法里面可以传入字节型数组,字符型数组,或者说由缓冲字符串,字符串生成器创建的字符串。
java中的所有类都是Object类的子类,直接或间接的继承了Object类的方法,其中包括toString()方法---将对象转变成字符串。
接下来我们一步一步的讲解:
首先先创建一个水果类,里面放进去水果类的属性name
我们的属性可以设置成private,也可以不设置,设置成private体现了java的封装性,防止外界对内部结构的修改(相关知识在Day008),如果想要外界修改的话,我们可以提供一个public接口来让外界访问和修改我们的私有化属性。所以这里我们就不写private了,让外界直接访问,相应的公有接口就不用去编写了,只需要去编写(重写toString方法)如下:
接着我们去主方法中去实例化一个Fruit类的对象,并给它的属性赋值:
之后我们使用字符串与之连接,并输出打印。
结果如下:
如上我们能够将对象与字符串连接,主要是因为我们重写了toString方法,如果我们不重写toString方法,那么对象打印出来的就是创建该对象的类的全路径名称和内存地址,如下:
我们将重写t(覆盖)toString的代码注释掉
打印输出的结果如下:
由于字符串时对象类型,所以我们不能简单(单纯)的使用“==”(双等号)判断String类的对象是否相等,而需要使用equals()方法比较两个对象的内容,而我们的字符串中存放的字母等都有大小写之分,如果我们需要区分大小写的比较,那么直接使用equals()即可,如果想要忽略大小写的话,可以在equals方法的基础上再加上IgnoreCase(忽略具体情况)→equalsIgnoreCase():
region有区域的意思,因此它的作用是选取两个字符串的某个区域的字符进行对比。
定义:一个字符串的子字符串(指定长度)与另外一个字符串的子字符串(指定长度)之间的比较
基本格式:regionMathes(toffeset,other,ooffeset,len)---offeset有出发的意思。
此方法有着可以忽略字母大小写的另外一种表示在该方法中的最前面加入参数true,表示忽略大小写---其参数名其实是ignoreCase,它的表示为ignoreCase=true。为了方便,我们一般采用简写。
该方法的返回值和上面两种方法一样,都是Boolean型(true|false),
此方法用于判断两个字符串间的大于,小于,等于关系。依据:字典中的顺序。
若两个字符串相等,返回0;此字符串小于相比较的字符串,返回负数(小于0);此字符串大于相比较的字符串,返回正数(大于0)。
字符串是一个对象,在这个对象中包含有length属性,是该字符串的长度,我们直接使用String类中的length()方法就可以获取其属性值。
String类有两个方法来进行字符串大小写的转换
查找字符串有以下两种方法
【若字符没有出现则返回-1】
在原有的两个方法的参数里面加入指定开始的索引号即可,如下:
格式:str.substring(start,end)
我们的String字符串对象的长度是固定的且它的内容也不能更改和编辑,如果我们直接打印出来str11,效果依旧是没有执行替换的样子:
因此我们需要再创建一个新的对象来接收新生成的字符串对象。
replaceAll()与replace()都是替换字符串里面对应的全部字符的,但是replaceAll()方法中可以使用正则表达式,,而replace()方法只能传入单纯的字符串。
该方法可以按指定的分割字符或字符串,将字符串内容分割并存放到字符串数组中。
格式:str.split(regex)
【如果字符串中没有统一的的分隔符,可以使用‘|’定义多个分隔符,例如,“,|-|!”分别以‘,’,‘-’和‘!’作为分隔符】。如下,我们使用了‘,’来分割含有‘,’的字符串:
从上面我们可以看到,经过分割的字符串是保存到数组中的。
接下来我们使用一个综合案例(有兴趣的看看):使用split将字符串里面的数字分割出来【涉及知识点:正则表达式里面的“\\D”---代表任何非数字的字符;Integer.parseInt()---将输入的字符转换成整型。】
如上:输出字符串里面的数字,其实如果我们的字符串里面的数字是不规律排列的话,就会报错,想要去了解的可以自己去尝试一下。
格式化字符串相信大家在学习数据类型及输出打印里面就有了解。没错,格式化字符串就相当于使用printf来打印字符串,并且里面使用的是占位符。如我们常见的字符串类型的占位符为“%s”。其他常见的格式化字符串的占位符(转换符)有以下几个:
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
首先我们要先创建日期对象,如下:
出现爆红,主要原因是我们没有导入Date类包,接下来我们去导入Date类。
处理日期和时间格式的转换符--%tx-------------x另外的转换符。x对应的转换符如下:
上面的%tc输出的CST的意思为China Standard Time(中国标准时间)。如果是其他国家的时区,有不同的表达:
【GMT+8|UTC+8=CST】
如上,当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)使用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);
}
}
出现如上问题我们抛异常即可,在主方法后面加上: 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);
}
}
StringBuilder意思即为字符串生成器,大家会说,我们可以使用String类来创建字符串对象,为啥要再多一个StringBuilder类来创建字符串呢?其实主要原因是因为:
创建字符串生成器可以通过三种不同的构造方法实现:
如上,我们没有给sb和sb1对象传入内容,因此它们的初始内容都为默认为空。 我们也知道字符串生成器是可以动态的对字符串内容进行修改的,所以字符串生成器里面是有几种方法可以让我们的对字符串进行更改(增删插长)。
在StringBuilder中如果添加(附加)的内容超过了字符串生成器的可容纳的长度时,它会自动的增加容量来容纳附加的内容。如下:
通过以上代码的实现,相信大家也看到,我们在对字符串生成器进行修改时,是没有再去创建一个新的对象来接收的,都是在原有的基础上进行修改。因此字符串生成器对字符的处理更加灵活。