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),
- starsWith(str)---判断字符串是否以指定的内容开始,str参数作为前缀的字符串。
- endsWith(str)---判断字符串是否以指定内容结束,str参数作为后缀的字符串。
3)compareTo()方法比较字符串
此方法用于判断两个字符串间的大于,小于,等于关系。依据:字典中的顺序。
若两个字符串相等,返回0;此字符串小于相比较的字符串,返回负数(小于0);此字符串大于相比较的字符串,返回正数(大于0)。
4,length()获取字符串长度
字符串是一个对象,在这个对象中包含有length属性,是该字符串的长度,我们直接使用String类中的length()方法就可以获取其属性值。
5,toUpperCase()和toLowerCase()字符串大小写转换
String类有两个方法来进行字符串大小写的转换
- toUpperCase()---将字符串内的所有字符从小写字母改写为大写字母
- toLowerCase()---将字符串中的所有字符从大写字母改写为小写字母。
6,indexOf及lastIndexOf()查找字符串
查找字符串有以下两种方法
1)无指定搜索起点
- indexOf(str)---搜索字符或字符串首次出现的位置
- 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”。其他常见的格式化字符串的占位符(转换符)有以下几个:
- 字符串:%s
- 字符:%c
- 浮点:%f
- 布尔:%b
- 换行符:%n
- 指数:%e
- 百分比类型:%%
- 十进制:%d
- 十六进制:%x
- 十六进制浮点数:%a
- 八进制:%o
- 日期与时间:%tx---x代表不同的日期与时间转换符
搭配转换符的有以下几个:
- ‘+’:正数
- ‘-’:左对齐
- ‘0’:数字前补0
- ‘,’:以逗号对数字分组
- ‘(’:使用括号包含负数
- ‘<’:格式化前一个转换符所描述的参数
- ‘$’:被格式化的参数索引,可以指定传入的参数的顺序。
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); //不足左补0System.out.printf("使用(来包含负数:%(d%n", -5); //使用(来包含负数,不显示负号System.out.printf("浮点数:%2$f 整数:%1$d",66,6.6); //$被格式化的参数索引}
}
11,%tx日期和时间字符串格式化
首先我们要先创建日期对象,如下:
出现爆红,主要原因是我们没有导入Date类包,接下来我们去导入Date类。
处理日期和时间格式的转换符--%tx-------------x另外的转换符。x对应的转换符如下:
- 输出包括全部日期和时间的信息 --》c
- 输出年月日的格式:年-月-日------》F
- 输出年月日的格式:年/月/日------》D
- 输出12时制的时间(精确到秒)---》r
- 输出24时制的时间(精确到秒)---》T
- 输出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它允许进行对我们的数据进行格式化,解析。
- 格式化:将我们输入的Date日期按照指定的模式格式化为符合模式的字符串。
- 解析:将我们输入的字符串把符合模式的字符串解析为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类来创建字符串呢?其实主要原因是因为:
- String类字符串对象本身是不可变的,且它的长度是固定的以及内容不能改变和编辑,每次使用‘+’连接符来连接并生成新的字符串(指针指向新的String对象),都要在内存中创建新的字符串对象,并为该对象分配新的空间在字符串执行重复修改的情况下,这样不断的创建新的字符串对象,将会极大的增大系统的开销。
- 而StringBuilder类可以动态地更改字符串的内容,每次改变StringBuilder如果有要频繁的执行字符串操作,使用StringBuilder类会让字符串的执行效率大大提高。
创建字符串生成器可以通过三种不同的构造方法实现:
- StringBuilder():此构造方法将创建一个空的字符串生成器,初始容量为16字符。
- StringBuilder(int capacity):capacity定义了字符串生成器的初始容量
- StringBuilder(String str):使用指定的字符串创建并初始化一个字符串生成器,初始内容就是指定的字符串内容。
如上,我们没有给sb和sb1对象传入内容,因此它们的初始内容都为默认为空。 我们也知道字符串生成器是可以动态的对字符串内容进行修改的,所以字符串生成器里面是有几种方法可以让我们的对字符串进行更改(增删插长)。
- 增-append()方法可以在字符串的末尾处追加内容,有多个重载方法,可以接受任何类型的数据,甚至是一个字符串生成器。
- 删-delete(int start,int end )方法可以从字符串生成器中删除start到end-1指定范围的子字符串,deleteCharAt(int index )方法可以删除字符串生成器中指定索引位置的字符
- 插-insert(int offset,arg)方法向字符串生成器中指定的位置插入数据内容,可以是数据类型也可以是字符串生成器。
- 长-length()方法可以返回字符串生成器中内容的长度
在StringBuilder中如果添加(附加)的内容超过了字符串生成器的可容纳的长度时,它会自动的增加容量来容纳附加的内容。如下:
通过以上代码的实现,相信大家也看到,我们在对字符串生成器进行修改时,是没有再去创建一个新的对象来接收的,都是在原有的基础上进行修改。因此字符串生成器对字符的处理更加灵活。
Day010---java中的字符串处理,字符串格式化及日期格式化。相关推荐
- java找重复字符串_在java中怎样查找重复字符串
在一段java编程代码中,字符串是不可缺少的一个要素,属于java中的基础知识,字符串不仅在java面试题中会出现,在编写代码时更要掌握怎样使用字符串.在前面我们也学习过关于字符串截取的知识,你应该有 ...
- c语言中大写英文字母所占字节,Java中字符编码和字符串所占字节数 .
首 先,java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数 系统中,一个char通常占1个字节,但是在0~12 ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...
- java怎么统计随机数出现次数,Excel统计出现次数、个数的VBA代码 java中怎么判断一个字符串中包含某个字符或字...
延伸:java中怎么判断一个字符串中包含某个字符或字符 描述:...一个字符串中包含某个字符的单词说出现的次数 c#什么方法可以判断字符串中包含某个字符的个数? JAVA判断字符串数组中是否包含某字符 ...
- java中的字符,字符串,数字之间的转换(亲测)
string 和int之间的转换 string转换成int :Integer.valueOf("12") int转换成string : String.valueOf(12) ch ...
- Java中怎么样检查一个字符串是不是数字呢
问题:Java中怎么样检查一个字符串是不是数字呢 在解析之前,怎么样检查一个字符串是不是数字呢 回答一 这些通常是由一个简单的用户自定义函数去解决的(即,自带的 "isNumeric&quo ...
- java中的字符,字符串,数字之间的转换
java中的字符,字符串,数字之间的转换 string 和int之间的转换 string转换成int :Integer.valueOf(" ") int转换成string : St ...
- java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替
原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...
- Java中如何输入一个字符串
Java中如何输入一个字符串 首先需导入java.util包中的Scanner类,如图: 接着在main里创建Scanner类对象,记得要把System.in加上这是专门获取用户输入的内容的,它会交给 ...
- 字符和字节详解、Java中字节串和字符串相互转换
字符.字节和编码 1. 程序中的字符与字节 字节是规定存储大小的存储单位,规定为8位一字节(8bit = 1 byte). 字符是人类的描述符号.存储在计算机时,不同的编码格式会有不同的字节组合,一般 ...
最新文章
- 【青少年编程】【四级】数字之和
- Java中的occur_time,PLSQL报错: ORA-12170:TNS connect timeout occurred
- 安卓模拟器按键_安卓模拟机(夜神模拟器)
- 008 selenium html报告
- C++语法:vector的使用
- 解决新安装的Ubuntu18.04没有网络连接的问题
- 我安装Microsoft SQLServer 2000时出现问题
- MySQL高级-索引
- Matconvnet学习笔记
- netron配置和使用
- java 爬虫爬取糗事百科热图图片
- 字符串前面添加u,r,b的含义
- Tablespace free space
- for update造成的锁表以及解锁
- sfc /scannow命令如何能用虚拟光驱完成修复?(xp下的办法)
- 计算机科学与技术在生物方面的应用,浅谈信息技术在生物工程中的应用意义
- ARM中断向量表的简单分析
- 通过Exiv2读取照片的Exif信息获取GPS,焦距等信息
- 2021年6月深圳PMP考试地点有哪些?
- 索引(从零开始)必须大于或等于零,且小于参数列表的大小的错位问题
热门文章
- android10 关闭默认输入法的“更正建议”
- java 进阶(持续补充)
- 基于Stm32的RFID-RC522模块的对RFID读写使用
- vue2获取当前时间并时时刷新显示在当前页面
- 穷举法php,第九周项目6-穷举法 换硬币
- LeetCode 1542. 找出最长的超赞子字符串***
- 2023 七彩自助发卡网虚拟商品系统源码
- 傲梅集中备份:同时给多太电脑文件同步
- Apple 2014年 9月9日發表會內容(iphone6, iphone 6 plus, Apple Watch)「柯博文老師」
- 为什么培训机构出来的..总遭人嫌弃。。。