【今日】
道路对了,就不怕遥远
目录
一 格式化字符串
String类静态format()方法用于创建格式化的字符串。
【方法】:format(string format,Object...args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地的语言环境。语法如下:
str.format(String format,Object...args)
▣format:格式字符串。
▣args:格式字符串中由格式说明符引用的参数。
1.1时间和日期字符串格式化
【日期格式化】
Date date=new Date();//创建Date对象date
String s=String.format("%te",date);//通过format()方法对date进行格式化
这里%te是转换符,常用的日期格式化转换符如表:
用以上转换符实现部分功能:
import java.util.Date;
public class Demo {
public static void main(String[] args) {
Date date=new Date();//创建Date对象date
System.out.println(String.format("%tc",date));
System.out.println("现在是一个月中的第"+String.format("%te",date)+"天");
System.out.println("现在是"+String.format("%tb",date));
System.out.println("现在是:"+String.format("%tA",date));
System.out.println("现在是一年中的第"+String.format("%tj",date)+"天");
}
}
【运行结果 】
【时间格式化】
使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化。格式时间的转换符如表:
用以上转换符实现部分功能:
import java.util.Date;
public class Demo {
public static void main(String[] args) {
Date date=new Date();//创建Date对象date
System.out.print("现在是:"+String.format("%tH",date)+"时");
System.out.print(String.format("%tM",date)+"分");
System.out.println(String.format("%tS",date)+"秒");
}
}
【运行结果 】
【格式化常见的日期时间组合】
用以上转换符实现功能:
import java.util.Date;
public class Demo {
public static void main(String[] args) {
Date date=new Date();//创建Date对象date
System.out.println(String.format("%tF",date));
System.out.println(String.format("%tD",date));
System.out.println(String.format("%tc",date));
System.out.println(String.format("%tr",date));
System.out.println(String.format("%tT",date));
System.out.println(String.format("%tR",date));
}
}
【运行结果 】
二 常规类型格式化
常规类型格式化可应用于任何参数类型,转换符表如下:
用以上转换符实现部分功能:
public class Demo {
public static void main(String[] args) {
System.out.println("2>3吗?:"+String.format("%B",2>3));
System.out.println("526的散列码:"+String.format("%H",526));
System.out.println("520的八进制为:"+String.format("%o",520));
}
}
【运行结果 】
三 使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一些字符串满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。正则表达式的元字符及其意义如表所示:
在正则表达式中,可以使用方括号括起若干个字符来表示一个元字符,该字符可代表方括号中的的任何一个字符。例如:
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如,”A*“代表A可在字符串中出现0次或多次。限定修饰符的用法如表所示:
【例题】验证E-mail地址是否合法。
邮箱名:是可用于标识的字符;
服务器名称::是可用于标识的字符;
.[中间名] :可有可无;
后缀:2-3位的字符;
\\w+@+\\w+(\\.\\w{2,3})*\\.\\w{2,3}
()内可有可无。
【完整代码】:
import java.util.Scanner;
public class Dome {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String regex = "\\w+@\\w+(\\.\\W{2,3})*\\.\\w{2,3}";
System.out.println("请输入的合法地址:");
String str = sc.nextLine();
if(str.matches(regex)) {
System.out.println("输入的地址合法");
}else {
System.out.println("输入的地址不合法");
}
}
}
【运行结果】
【例题】验证字符串是不是大陆手机号
分析可得大陆手机号格式:
【完整代码如下】
import java.util.Scanner;
public class text {
public static void main(String[] args) {
String regex = "(13[0-9]|15[012356789]|18[056789])\\d{8}";
Scanner sc = new Scanner(System.in);
System.out.println("请输入电话号码:");
String phone = sc.nextLine();
if(phone.matches(regex)) {
System.out.println("是大陆电话号码!");
}else {
System.out.println("不是大陆电话号码!");
}
}
}
【运行结果】
四 字符串生成器
4.1StringBuffer类
StringBuffer类是线程安全的可变字符序列,它是一个类似于String的字符串缓冲区,其实体容量会随着存放的字符串增加而自动增加。
【语法】
StringBuffer sbf = new StringBuffer();
StringBuffer sbf = new StringBuffer("abc");
StringBuffer sbf = new StringBuffer(32);
常用方法:
【追加字符序列】append()方法
该方法用于字符串生成器中追加内容。语法如下:
append(content)
▣content表示要追加到字符串生成器中的内容,可以是任何类型的数据或对象。
【插入字符串】insert()方法
该方法用于向字符串生成器中的指定位置插入数据内容。语法如下:
insert(int offset,arg)
▣offset 字符串生成器的位置。该参数必须大于等于0,小于等于此序列的长度。▣arg 将插入字符串生成器的位置。
【删除子字符串】delete()方法
移除此序列的字符串中的字符。该字符串从指定的start处开始,一直到索引end-1处的字符。如果不存在这种字符,则一直到序列尾部。语法如下:
delet(int start,int end)
▣start 将要删除字符串的起点
▣end 将要删除的字符串的终点位置。
【修改指定索引处的字符】setCharAt()方法
语法如下:
etCharAt(int index, char ch);
▣index要修改的索引位置
▣ch 要修改的目标字符
【字符串反序】 reverse()方法
语法如下:
str.reverse();
4.2StringBuider类
StringBuider类与StringBuffer类具有相同的API,所以两者的使用方法也相同。
【StringBuider与StringBuffer与String的关系】
【StringBuider与StringBuffer与String的不同之处】
String只能赋值一次,每一次改变内容都生成了一个新的对象,然后原有的对象引用了新的对象,所以说String本身是不可改变。每一次改变string的字符串内容,都会在内存创建新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低Java虚拟机的工作效率。
而StringBuffer和StringBuilder不同,每次操作都是对自身对象做操作,而不是生成新的对象,其所占空间会随着字符内容增加而扩充,做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。
根据表中内容,我还可以总结这些类的适用场景
(1)操作少、数据少,用string。
(2)单线程,操作多,数据多,用StringBuilder。
(3)多线程,操作多,数据多,用StringBuffer。
【代码】
public class text {
public static void main(String[] args) {
StringBuffer sbf = new StringBuffer("古诗春晓");
sbf=sbf.delete(0, 2);
System.out.println(sbf.toString());
sbf=sbf.insert(1,"眠不觉");
System.out.println(sbf.toString());
sbf=sbf.append(",处处闻啼鸟。");
System.out.println(sbf.toString());
}
}
【运行结果】