目录

Java String笔记

Java Format笔记

字符串格式化在日常编码过程中是必须使用的,尽管此时Java18已经推出一段时间了,大部分企业还是常用的Java8版本用于生产,所以在低版本Java中如何优雅的使用字符串格式化是很有必要的。

工具

字符串格式化有三种常用的形式

1
2
3
%s
%1$s
{0}

参数不兼容

%s

正常使用

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
    	String formatNormal121 = String.format("第%s行%s不能为空。", "1","displayName");
    	System.out.println(formatNormal121);
    }
}

输出

1
第1行displayName不能为空。

缺少参数(多占位符)

会抛出MissingFormatArgumentException异常

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import java.util.MissingFormatArgumentException;
public class Test {
    public static void main(String[] args) {
        String formatNormalLessParam;
        try {
          formatNormalLessParam = String.format("第%s行%s不能为空。", "1");
          System.out.println(formatNormalLessParam);
        } catch (MissingFormatArgumentException e) {
          System.out.println("format Normal Less Param error:" +e.getMessage());
    //      throw new RuntimeException(e);
        }
    }
}

输出

1
format Normal Less Param error:Format specifier '%s'

多余参数(少占位符)

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
        String formatNormalMoreParam = String.format("第%s行%s不能为空。", "1","displayName","moreParameters");
        System.out.println(formatNormalMoreParam);
    }
}

输出

1
第1行displayName不能为空。

%1$s

正常使用

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
        String orderFormat121 = String.format("第%1$d行%2$s不能为空。", 1, "displayName");
        System.out.println(orderFormat121);
    }
}

输出

1
第1行displayName不能为空。

缺少参数(多占位符)

会抛出MissingFormatArgumentException异常

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import java.util.MissingFormatArgumentException;
public class Test {
    public static void main(String[] args) {
        String orderFormatLessParam;
        try {
          orderFormatLessParam = String.format("第%1$d行%2$s不能为空。", 1);
          System.out.println(orderFormatLessParam);
        } catch (MissingFormatArgumentException e) {
          System.out.println("order Format Less Param error:" +e.getMessage());
    //      throw new RuntimeException(e);
        }
    }
}

输出

1
order Format Less Param error:Format specifier '%2$s'

多余参数(少占位符)

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
        String orderFormatMoreParam = String.format("第%1$d行%2$s不能为空。", 1, "displayName",  "moreParameters");
        System.out.println(orderFormatMoreParam);
    }
}

输出

1
第1行displayName不能为空。

{0}

正常使用

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
       String syntacticSugarFormat121= MessageFormat.format("第{0}行{1}不能为空。", 1, "displayName");
        System.out.println(syntacticSugarFormat121);
    }
}

输出

1
第1行displayName不能为空。

缺少参数(多占位符)

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
        String syntacticSugarFormatLessParam= MessageFormat.format("第{0}行{1}不能为空。", 1);
        System.out.println(syntacticSugarFormatLessParam);
    }
}

输出

1
第1行{1}不能为空。

多余参数(少占位符)

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
        String syntacticSugarFormatMoreParam= MessageFormat.format("第{0}行{1}不能为空。", 1, "displayName",  "moreParameters");
        System.out.println(syntacticSugarFormatMoreParam);
    }
}

输出

1
第1行displayName不能为空。

总结

综述

高版本Java(如17+)String.format也支持{0}形式的格式化,低版本推荐使用MessageFormat.format,不会抛异常。

同时String.format参数不对,Idea会在打开文件和git提交时进行类型警告,根据警告也可以处理

文件打开

./1.png

git提交

新版idea为了提高性能,将此功能改为异步,先commit掉代码,如有警告和报错则提示

C:\Users\kingdee\Desktop\Java-String-Note\2.png

如果没有problem页签,去view->tool view->problem即可开启或默认快捷键alt+6

旧版本idea会进行分析,如果有警告和错误会进行二次确认

C:\Users\kingdee\Desktop\Java-String-Note\3.png

如果commit不进行代码检测说明关闭了设置,重新开启即可

C:\Users\kingdee\Desktop\Java-String-Note\4.png

类型

转 换 符 说 明 示 例
%s 字符串类型 “mingrisoft”
%c 字符类型 ’m'
%b 布尔类型 true
%d 整数类型(十进制) 99
%x 整数类型(十六进制) FF
%o 整数类型(八进制) 77
%f 浮点类型 99.99
%a 十六进制浮点类型 FF.35AE
%e 指数类型 9.38e+5
%g 通用浮点类型(f和e类型中较短的)
%h 散列码
%% 百分比类型
%n 换行符
%tx 日期与时间类型(x代表不同的日期与时间转换符

测试代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
    public static void main(String[] args) {  
        String str=null;  
        //$使用  
        str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");             
        System.out.println(str);                       
        //+使用  
        System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);  
        //补O使用  
        System.out.printf("最牛的编号是:%03d%n", 7);  
        //空格使用  
        System.out.printf("Tab键的效果是:% 8d%n", 7);  
        //.使用  
        System.out.printf("整数分组的效果是:%,d%n", 9989997);  
        //空格和小数点后面个数  
        System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);  
    }  

输出

1
2
3
4
5
6
    格式参数$的使用:99,abc  
    显示正负数的符号:+99与-99  
    最牛的编号是:007  
    Tab键的效果是:       7  
    整数分组的效果是:9,989,997  
    一本书的价格是: 

带规则

标 志 说 明 示 例 结 果
+ 为正数或者负数添加符号 ("%+d",15) +15
左对齐 ("%-5d",15) |15 |
0 数字前面补0 ("%04d", 99) 0099
空格 在整数之前添加指定数量的空格 ("% 4d", 99) | 99|
, 以“,”对数字分组 ("%,f", 9999.99) 9,999.990000
( 使用括号包含负数 ("%(f", -99.99) (99.990000)
# 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 ("%#x", 99)("%#o", 99) 0x630143
< 格式化前一个转换符所描述的参数 ("%f和%<3.2f", 99.45) 99.450000和99.45
$ 被格式化的参数索引 ("%1$d,%2$s", 99,“abc”) 99,abc

日期时间

转 换 符 说 明 示 例
c 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
F “年-月-日”格式 2007-10-27
D “月/日/年”格式 10/27/07
r “HH:MM:SS PM”格式(12时制) 02:25:51 下午
T “HH:MM:SS”格式(24时制) 14:28:16
R “HH:MM”格式(24时制) 14:28

测试代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    public static void main(String[] args) {  
        Date date=new Date();                                  
        //c的使用  
        System.out.printf("全部日期和时间信息:%tc%n",date);          
        //f的使用  
        System.out.printf("年-月-日格式:%tF%n",date);  
        //d的使用  
        System.out.printf("月/日/年格式:%tD%n",date);  
        //r的使用  
        System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
        //t的使用  
        System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
        //R的使用  
        System.out.printf("HH:MM格式(24时制):%tR",date);  
    }  
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static void main(String[] args) {  
    Date date=new Date();                                      
    //b的使用,月份简称  
    String str=String.format(Locale.US,"英文月份简称:%tb",date);       
    System.out.println(str);                                                                              
    System.out.printf("本地月份简称:%tb%n",date);  
    //B的使用,月份全称  
    str=String.format(Locale.US,"英文月份全称:%tB",date);  
    System.out.println(str);  
    System.out.printf("本地月份全称:%tB%n",date);  
    //a的使用,星期简称  
    str=String.format(Locale.US,"英文星期的简称:%ta",date);  
    System.out.println(str);  
    //A的使用,星期全称  
    System.out.printf("本地星期的简称:%tA%n",date);  
    //C的使用,年前两位  
    System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);  
    //y的使用,年后两位  
    System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);  
    //j的使用,一年的天数  
    System.out.printf("一年中的天数(即年的第几天):%tj%n",date);  
    //m的使用,月份  
    System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);  
    //d的使用,日(二位,不够补零)  
    System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);  
    //e的使用,日(一位不补零)  
    System.out.printf("月份的日(前面不补0):%te",date);  
} 

输出

1
2
3
4
5
6
    全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
    年-月-日格式:2012-09-10  
    月/日/年格式:09/10/12  
    HH:MM:SS PM格式(12时制):10:43:36 上午  
    HH:MM:SS格式(24时制):10:43:36  
    HH:MM格式(24时制):10:43  
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
英文月份简称:Sep  
本地月份简称:九月  
英文月份全称:September  
本地月份全称:九月  
英文星期的简称:Mon  
本地星期的简称:星期一  
年的前两位数字(不足两位前面补0):20  
年的后两位数字(不足两位前面补0):12  
一年中的天数(即年的第几天):254  
两位数字的月份(不足两位前面补0):09  
两位数字的日(不足两位前面补0):10  
月份的日(前面不补0):10 

自定义时间

转 换 符 说 明 示 例
H 2位数字24时制的小时(不足2位前面补0) 15
I 2位数字12时制的小时(不足2位前面补0) 03
k 2位数字24时制的小时(前面不补0) 15
l 2位数字12时制的小时(前面不补0) 3
M 2位数字的分钟(不足2位前面补0) 03
S 2位数字的秒(不足2位前面补0) 09
L 3位数字的毫秒(不足3位前面补0) 015
N 9位数字的毫秒数(不足9位前面补0) 562000000
p 小写字母的上午或下午标记 中:下午英:pm
z 相对于GMT的RFC822时区的偏移量 +0800
Z 时区缩写字符串 CST
s 1970-1-1 00:00:00 到现在所经过的秒数 1193468128
Q 1970-1-1 00:00:00 到现在所经过的毫秒数 1193468128984

测试代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    public static void main(String[] args) {  
        Date date = new Date();  
        //H的使用  
        System.out.printf("2位数字24时制的小时(不足2位前面补0):%tH%n", date);  
        //I的使用  
        System.out.printf("2位数字12时制的小时(不足2位前面补0):%tI%n", date);  
        //k的使用  
        System.out.printf("2位数字24时制的小时(前面不补0):%tk%n", date);  
        //l的使用  
        System.out.printf("2位数字12时制的小时(前面不补0):%tl%n", date);  
        //M的使用  
        System.out.printf("2位数字的分钟(不足2位前面补0):%tM%n", date);  
        //S的使用  
        System.out.printf("2位数字的秒(不足2位前面补0):%tS%n", date);  
        //L的使用  
        System.out.printf("3位数字的毫秒(不足3位前面补0):%tL%n", date);  
        //N的使用  
        System.out.printf("9位数字的毫秒数(不足9位前面补0):%tN%n", date);  
        //p的使用  
        String str = String.format(Locale.US, "小写字母的上午或下午标记(英):%tp", date);  
        System.out.println(str);   
        System.out.printf("小写字母的上午或下午标记(中):%tp%n", date);  
        //z的使用  
        System.out.printf("相对于GMT的RFC822时区的偏移量:%tz%n", date);  
        //Z的使用  
        System.out.printf("时区缩写字符串:%tZ%n", date);  
        //s的使用  
        System.out.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts%n", date);  
        //Q的使用  
        System.out.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ%n", date);  
    }  

输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
2位数字24时制的小时(不足2位前面补0):11  
2位数字12时制的小时(不足2位前面补0):11  
2位数字24时制的小时(前面不补0):11  
2位数字12时制的小时(前面不补0):11  
2位数字的分钟(不足2位前面补0):03  
2位数字的秒(不足2位前面补0):52  
3位数字的毫秒(不足3位前面补0):773  
9位数字的毫秒数(不足9位前面补0):773000000  
小写字母的上午或下午标记():am  
小写字母的上午或下午标记(中):上午  
相对于GMT的RFC822时区的偏移量:+0800  
时区缩写字符串:CST  
1970-1-1 00:00:00 到现在所经过的秒数:1347246232  
1970-1-1 00:00:00 到现在所经过的毫秒数:1347246232773 

Java转义字符大全

转义字符是一种特殊的字符序列,用于表示无法直接输入或打印的字符。在Java中,转义字符以反斜杠(\)开头,后跟一个或多个字符。在本文中,我们将介绍Java中常用的转义字符及其用法,以及一些常见的示例。

常见的转义字符

以下是Java中常用的转义字符:

  1. \t:制表符,用于在输出中插入一个制表符,相当于按下Tab键。
  2. \n:换行符,用于在输出中插入一个换行符,将光标移动到下一行的开头。
  3. \b:退格符,用于删除前一个字符。
  4. \r:回车符,用于将光标移动到当前行的开头。
  5. \f:换页符,用于在输出中插入一个换页符。
  6. ':单引号,用于在字符常量中插入一个单引号。
  7. ":双引号,用于在字符串常量中插入一个双引号。
  8. \:反斜杠,用于在字符串常量中插入一个反斜杠。

代码示例

下面是一些使用转义字符的代码示例:

  1. 制表符示例:
1
2
3
System.out.println("姓名\t年龄\t性别");
System.out.println("张三\t20\t男");
System.out.println("李四\t18\t女");

输出结果:

1
2
3
姓名    年龄    性别
张三    20      男
李四    18      女
  1. 换行符示例:
1
System.out.println("第一行\n第二行\n第三行");

输出结果:

1
2
3
第一行
第二行
第三行
  1. 退格符示例:
1
System.out.println("Hello\bWorld");

输出结果:

1
HellWorld
  1. 回车符示例:
1
System.out.println("第一行\r第二行\r第三行");

输出结果:

1
2
3
第一行
第二行
第三行
  1. 换页符示例:
1
System.out.println("第一页\f第二页\f第三页");

输出结果:

1
2
3
第一页
第二页
第三页
  1. 单引号示例:
1
2
char c = '\'';
System.out.println(c);

输出结果:

1
'
  1. 双引号示例:
1
2
String s = "\"Hello\"";
System.out.println(s);

输出结果:

1
"Hello"
  1. 反斜杠示例:
1
2
String path = "C:\\Program Files\\Java";
System.out.println(path);

输出结果:

1
C:\Program Files\Java

总结

本文介绍了Java中常见的转义字符及其用法,并提供了相应的代码示例。通过使用转义字符,我们可以在输出中插入特殊字符,使输出结果更加灵活和易读。在实际编程中,我们经常会用到这些转义字符来处理各种不同的需求。因此,熟练掌握这些转义字符的用法对于Java开发者来说是非常重要的。