5、格式化字符串
String类的静态format()方法用于创建格式化字符串。format()方法有两种重载形式。
- format(String format,Object···args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。
语法如下:
str.format(String format,Object···args)
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0. - format(Local l,String format,Object···args)
l:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0.
1、日期和时间字符串格式化
- 日期格式化
常用的日期格式化转换符:
- 时间格式化
使用format()方法不仅可以完成日期格式化,也可以完成时间的格式化。时间格式化转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。
时间格式化转换符:
- 格式化常见的日期时间组合
常见的日期和时间组合的格式:
代码演示:
package com.company;
import java.util.Date;
public class day7 {
public static void main (String[] args){
System.out.println("1.---------------------------");
Date date = new Date();
String year = String.format("%tY",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+"号");
System.out.println("2.---------------------------");
String hour = String.format("%tH",date);
String minute = String.format("%tM",date);
String second = String.format("%tS",date);
System.out.println("现在是:"+hour+"时"+minute+"分"+second+"秒");
System.out.println("3.---------------------------");
String time = String.format("%tc",date);
String form = String.format("%tF",date);
System.out.println("全部时间信息是:"+time);
System.out.println("年-月-日格式:"+form);
}
}
结果:
2、常规类型格式化
常规转换符:
代码演示:
package com.company;
public class day71 {
public static void main(String[] args){
String str = String.format("%d",400/2);
String str2 = String.format("%b",3>5);
String str3 = String.format("%x",200);
System.out.println("400的一半是:"+str);
System.out.println("3>5正确吗?"+str2);
System.out.println("200的十六进制数是:"+str3);
}
}
结果:
6、使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义的字符串,这些特殊字符称为正则表达式的元字符。
正则表达式中的元字符:
在正则表达式中可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
例如:
[^456]:代表4、5、6之外的任何字符。
[a-r]:代表a-r中的任何一个字母。
[a-zA-Z]:代表任意一个英文字母。
[a-e[g-z]]:代表a-e或g-z中的任何一个字母(并运算)。
[a-0&&[def]]:代表字母d、e、f(交运算)。
[a-d&&[^bc]]:代表字母a、d(差运算)。
在正则表达式中可以使用限定修饰符来限定元字符出现的次数。
限定修饰符:
使用正则表达式判断一个邮箱地址是否合法:
代码演示:
package com.company;
public class day72 {
public static void main(String[] args){
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1 = "aaa@";
String str2 = "aaaaa";
String str3 = "11@11ffyu.dfg.com";
if(str1.matches(regex)){
System.out.println(str1+"是一个合法的邮箱地址格式");
}
if(str2.matches(regex)){
System.out.println(str2+"是一个合法的邮箱地址格式");
}
if(str3.matches(regex)){
System.out.println(str3+"是一个合法的邮箱地址格式");
}
}
}
结果:
字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大的增加系统开销。而J2SE5.0新增了可变的字符序列String-Builder类,大大提高了频繁增加字符串的效率。
实例:
代码演示:
package com.company;
public class day73 {
public static void main(String[] args){
String str = "";
long starTime = System.currentTimeMillis();
for(int i = 0;i < 90;i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
long time = endTime - starTime;
System.out.println(str);
System.out.println("String 消耗时间:"+ time);
StringBuilder builder = new StringBuilder("");
starTime = System.currentTimeMillis();
for(int j = 0;j < 90;j++){
builder.append(j);
}
endTime = System.currentTimeMillis();
time = endTime - starTime;
System.out.println(builder);
System.out.println("StringBuilder 消耗时间:"+ time);
}
}
结果:
通过这一实例可以看出,两种操作执行的时间差距很大。如果在程序中频繁的附加字符串,建议使用StringBuilder。新创建的StringBuilder对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则StringBuilder对象将自动增加长度以容纳被附加的字符。若要使用StringBuilder最后输出字符串结果,可以使用toString()方法。
利用StringBuilder类中的方法可动态的执行添加、删除和插入等字符串的编辑操作。该类方法如下:
- append()方法
该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char、String、double或者另一个字符串生成器等。
语法如下:
str.append(content)
content:表示要追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。 - insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、boolean、char等基本数据类型或其他对象。
语法如下:
str.insert(int offset ,arg)
offset:字符串生成器的位置。该参数必须大与等于0,且小于等于此序列的长度。
args:将插入至字符串生成器的内容。该参数可以是任何数据类型或其他对象。 - delete(int start, int end)方法
移除此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end-1处的字符,如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。
语法如下:
str.delete(int start,int end)
start:将要删除的字符串起点的位置。
end:将要删除的字符串的终点位置。
代码演示:
package com.company;
public class day74 {
public static void main(String[] args){
StringBuilder str = new StringBuilder("");
str.append("20210309");
System.out.println("1.-----append:"+str.toString());
str.insert(4,"年");
str.insert(7,"月");
str.append("日");
System.out.println("2.-----insert:"+str.toString());
str.delete(5,6);
str.delete(7,8);
System.out.println("3.-----delete:"+str.toString());
}
}
结果: