用的书:《Java从入门到精通》
day1(3.1-3.3): 【Java】从头开始的Java复健day1
day2(3.4-3.8): 【Java】从头开始的Java复健day2
day3(4.1-4.4): 【Java】从头开始的Java复健day3
day4(4.5-5.2): 【Java】从头开始的Java复健day4
day5(5.3-5.4): 【Java】从头开始的Java复健day5
第五章 字符串
5.5 格式化字符串
- format(String format, Object...args)
- format 格式字符串
- args 格式字符串中由格式说明引用的参数,如果还有格式说明以外的参数,则忽略这些额外的参数
- format(Local I, String format, Object...args)
- I 格式化过程中要应用的语言环境 如果为null 则不进行本地化
- format 格式字符串
- args 格式字符串中由格式说明引用的参数,如果还有格式说明以外的参数,则忽略这些额外的参数
日期和时间字符串格式化
将输出的时间字符串变成自己想要的格式
- 日期格式化
转换符 | 说明 | 实例 |
---|---|---|
%te | 一个月中的某一天(1~31) | 2 |
%tb | 指定语言环境中的月份简称 | Feb(en) 二月(中) |
%tB | 指定语言环境中的月份全称 | February(en) 二月(中) |
%tA | 指定语言环境中的周几全称 | Monday(en) 星期一(中) |
%ta | 指定语言环境中的周几简称 | Mon(en) 星期一(中) |
%tc | 包括全部日期和时间信息 | 星期二 三月 25 13:37:22 CST 2005 |
%tY | 4位年份 | 2008 |
%tj | 一年中的第几天(001~366) | 085 |
%tm | 月份 | 03 |
%td | 一个月中的第几天(1~31) | 02 |
%ty | 2位年份 | 08 |
- 时间格式化
转换符 | 说明 | 实例 |
---|---|---|
%tH | 2位数字的24小时制的小时(00~23) | 14 |
%tI | 2位数字的12小时制的小时(01~12) | 05 |
%tk | 2位数字的24小时制的小时(0~23) | 5 |
%tl | 2位数字的12小时制的小时(1~12) | 10 |
%tM | 2位数字的分钟(00~59) | 05 |
%tS | 2位数字的秒数(00~60) | 12 |
%tL | 3位数字的毫秒数(000~999) | 920 |
%tN | 9位数字的微毫秒 | 062000000 |
%tp | 指定语言环境下上午或下午 | 下午(中) pm(en) |
%tz | 相对于GMT RFC 82格式的数字时区偏移量 | +0800 |
%tZ | 时区缩写形式的字符串 | CST |
%ts | 1970-01-01 00:00:00至现在经过的秒数 | 1206426646 |
%tQ | 1970-01-01 00:00:00至现在经过的毫秒数 | 1206426737453 |
- 格式化常见的日期时间组合
转换符 | 说明 | 实例 |
---|---|---|
%tF | "年-月-日"格式 4位年份 | 2008-03-25 |
%tD | "月/日/年"格式 2位年份 | 03/25/08 |
%tc | 全部日期和时间信息 | 星期二 三月 25 15:20:00 CST 2008 |
%tr | "时:分:秒 PM(AM)"格式 12时制 | 03:22:06 下午 |
%tT | "时:分:秒"格式 24时制 | 15:23:50 |
%tR | "时:分"格式 24时制 | 15:25 |
常规类型格式化
可以用于任何参数类型
转换符 | 说明 | 实例 |
---|---|---|
%b %B | 结果被格式化为布尔类型 | true |
%h %H | 结果被格式化为散列码 | A05A5198 |
%s %S | 结果被格式化为字符串类型 | "abcd" |
%c %C | 结果被格式化为字符类型 | 'a' |
%d | 结果被格式化为十进制整数 | 40 |
%o | 结果被格式化为八进制整数 | 11 |
%x %X | 结果被格式化为十六进制整数 | 4b1 |
%e | 结果被格式化为用科学计数法表示的十进制数 | 1.700000e+01 |
%a | 结果被格式化为带有效位数和指数的十六进制浮点数 | 0X1.C000000000001P4 |
%n | 结果为特定于平台的行分隔符 | |
%% | 结果为字面值'%' | % |
import java.util.Date;
public class Java5_5 {
public static void main(String[] args){
// 日期格式化
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 + "年" + month + day + "日");
// 时间格式化
String hour = String.format("%tH", date);
String minute = String.format("%tM", date);
String second = String.format("%tS", date);
System.out.println(hour + "时" + minute + "分" + second + "秒");
// 格式化常见的日期时间组合
String time = String.format("%tc", date);
String from = String.format("%tF", date);
System.out.println("全部的时间信息:" + time);
System.out.println("年-月-日格式:" + from);
// 常规类型格式化
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的16进制数是" + str3);
}
}
5.6 使用正则表达式
正则表达式用于判断语句中某一字符是否满足某一格式
正则表达式关键的就是要会写正则表达式
元字符 | 正则表达式中的写法 | 意义 |
---|---|---|
. | . | 代表任意一个字符 |
\d | \\d | 代表0~9的任何一个数字 |
\D | \\D | 代表任何一个非数字字符 |
\s | \\s | 代表空白字符 如'\t' '\n' |
\S | \\S | 代表非空白字符 |
\w | \\w | 代表可用作标识符的字符 但不包括"$" |
\W | \\W | 代表不可用于标识符的字符 |
\p | \\p | 代表小写字母a~z |
\p | \\p | 代表大写字母A~Z |
\p | \\p | ASCII字符 |
\p | \\p | 字母字符 |
\p | \\p | 十进制数字 0~9 |
\p | \\p | 数字或字母字符 |
\p | \\p | 标点符号 !"#$%'()*+,-./:;<=>?@[\\]^_`{|}~ |
\p | \\p | 可见字符 [\p{Alnum}\p{Punct}] |
\p | \\p | 可打印字符 [\p{Graph}\x20] |
\p | \\p | 空格或制表符 [\t] |
\p | \\p | 控制字符 [\x00-\x1F\x7F] |
-
如果想在正则表达式中单纯表达'.' 需要加转义字符''
-
^ 匹配开头 $ 匹配结尾
-
可以使用方括号括起来若干字符来表示一个元字符 该元字符可以代表方括号中任何一个字符
eg [abc]4 即表示 a4 or b4 or c4 这三个都可以被匹配到
- [^456] 456以外的任何字符
- [a-r] a-r中任一字符
- [a-zA-Z] 任一英文字母
- [a-e[g-z]] a-e或g-z中的任一字符 并运算
- [a-o&&[def]] d e f 交运算
- [a-d&&[^bc]] a d 差运算
限定修饰符 | 意义 | 实例 |
---|---|---|
? | 0或1次 | A? |
* | 0或多次 | A* |
+ | 一次或多次 | A+ |
{n} |
正好出现n次 | A\{2} |
{n,} |
至少出现n次 | A{3,} |
{n,m} |
出现n~m次 | A{2,6} |
^ |
该正则表达式匹配的字符串在开头 | ^A |
美元符号 |
该正则表达式匹配的字符串在开结尾 | A美元符号 |
*"$"在表格中总是格式出问题 故用美元符号代替
public class Java5_6 {
public static void main(String[] args){
// \\w+: 一次或多次标识符 @ \\w+: 一次或多次标识符
// (\.\w{2,3})*: .和两三个标识符 这一点主要是识别类似.com .cn .org等 这个组合出现0或多次
// \.\w{2,3} 最后的.com .cn .org等
// 这个正则表达式不一定可以匹配所有的邮件地址
String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1 = "aaa@";
String str2 = "aaaaa";
String str3 = "[email protected]";
if (str1.matches(regex)){
System.out.println(str1 + "是一个合法的E-mail地址");
}
else if (str2.matches(regex)){
System.out.println(str2 + "是一个合法的E-mail地址");
}
else if (str3.matches(regex)){
System.out.println(str3 + "是一个合法的E-mail地址");
}
}
}
5.7 字符串生成器
创建成功的字符串对象 长度是固定的 内容不能被改变和编译
虽然+可以用来附加新字符或者字符串 但是会产生一个新的String实例 会在内存中创建新的字符串对象
J2SE5.0新增了可变的字符序列String-Builder类
新创建的StringBuilder类初始容量是16个字符 如果超过则会自动增长长度
若要使用StringBuilder来输出字符串结果 可以使用toString方法
- append() 追加 可以接受任何类型的数据 比如int等
- insert(int offset, arg) 指定位置插入 可以接受任何类型的数据
- delete(int start, int end) 删除指定位置的字符串
public class Java5_7 {
public static void main(String[] args) {
String str = "";
long starTime = System.currentTimeMillis();
for (int i=0; i < 10000; i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
long time = endTime - starTime;
System.out.println("String消耗时间:" + time);
StringBuilder builder = new StringBuilder("");
starTime = System.currentTimeMillis();
for (int j=0; j < 10000; j++){
builder.append(j);
}
endTime = System.currentTimeMillis();
time = endTime - starTime;
// 耗时明显更短
System.out.println("StringBuilder消耗时间:" + time);
}
}
5.8 小结 略
略
5.9 练习
public class Java_Test5_9 {
public static void main(String[] args) {
System.out.println("1.使用String类的toUpperCase()和toLowerCase()来实现大小写的转换");
String s1 = "sidHsoH";
System.out.println("s1 to upper case: " + s1.toUpperCase());
System.out.println("s1 to lower case: " + s1.toLowerCase());
System.out.println("2.分别截取字符串str1和str2的部分内容 如果截取后的两个字串相同,输出‘两个子串相同’,否则输出‘两个子串并不相同’");
String str1 = "hello world";
String str2 = "hello world!";
String substr1 = str1.substring(1);
String substr2 = str2.substring(1);
if (substr1.equals(substr2)){
System.out.println("两个子串相同");
}
else {
System.out.println("两个子串并不相同");
}
System.out.println("3.用正则表达式判断字符串text是否为合法的手机号");
String regex = "^1[3456789]\\d{9}$";
String tel = "112602260";
if (tel.matches(regex)){
System.out.println(tel + "是一个合法的手机号");
}
else {
System.out.println(tel + "不是一个合法的手机号");
}
System.out.println("4.使用字符串生成器 将字符串str追加1~10这10个数字");
StringBuilder str = new StringBuilder("start");
for (int i=1; i<11; i++){
str.append(i);
}
System.out.println(str);
}
}
标签:复健,Java,String,format,day6,System,println,格式化,out
From: https://www.cnblogs.com/ryukirin/p/17629913.html