1.字符(char)
字符 由用单引号引起来的1个字符或1个转义序列组成。
//示例
'a'
'%'
'\t'
'\\'
'\''
'\u03a9'
'\uFFFF'
'\177'
'™'
2.字符串(String)
2.1字符串声明
字符串 由用双引号引起来的零个或多个字符组成。
//空字符串
String 字符串名 = "";
//只包含 " 的字符串
String 字符串名 = "\"";
//包含16个字符的字符串
String 字符串名 = "This is a string";
2.2连接字符串
Java语言允许使用 +
号连接两个字符串。
//结果为"Expletivedeleted"
String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;
2.3格式化字符串(Format String)
每个产生格式化输出的方法都需要一个格式化字符串(format string)和一个参数列表(argument list)。
格式化字符串是一个可能包含固定文本(fixed text)和一个或多个嵌入格式说明符(format specifier)的字符串。
如果参数多于格式说明符,则忽略多余的参数。
//示例
Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
格式化字符串是该format
方法的第一个参数,它包含三个格式说明符“ %1$tm
”、“ %1$te
”和“ %1$tY
”,它们指示应如何处理参数以及应在文本中插入的位置。格式字符串的其余部分是固定文本"Dukes Birthday: "
,包括任何其他空格或标点符号。参数列表包含传递给format
方法在格式字符串之后的所有参数。
2.4格式说明符(format specifier)
%[参数索引$][标志][宽度][.精度]转换
格式说明符 | 格式 | 含义 |
参数索引(argument_index) | 1个十进制整数 | 指示参数在参数列表中的位置。 |
标志(flags) | 1组字符 | 用于修改输出格式。 |
宽度(width) | 1个正十进制整数 | 指示要写入输出的最小字符数。 |
精度(precision) | 1个非负十进制整数 | 对于通用参数类型,精度是要写入输出的最大字符数。 对于浮点转换 'a' , 'A' , 'e' , 'E' , 和'f' ,精度是小数点后的位数。如果转换为'g' 或'G' ,则精度为舍入后所得幅度中的总位数。对于字符、整数和日期/时间参数类型以及百分比和行分隔符转换,精度不适用;如果提供了精度,则会抛出异常。 |
转换(conversion) | 1个字符(通用、字符、数字、百分比、行分隔符) 2个字符(日期和时间,第一个字符是 't' 或'T' ,第二个字符表示要使用的格式。) | 指示应如何格式化参数。 |
2.5参数索引(Argument Index)
格式说明符可以通过三种方式引用参数:
显式索引
当格式说明符包含参数索引时,使用显式索引。参数索引是一个十进制整数,指示参数在参数列表中的位置。第一个参数由 “1$
” 引用,第二个参数由 “2$
” 引用,依此类推。一个参数可能被多次引用。
formatter.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s", "a", "b", "c", "d")
//输出 "d c b a d c b a"
相对索引
当格式说明符包含一个 '<'
('\u003c'
) 标志时使用相对索引,该标志会导致前一个格式说明符的参数被重新使用。如果没有先前的参数,则会抛出MissingFormatArgumentException
。
formatter.format("%s %s %<s %<s", "a", "b", "c", "d")
//输出 "a b b b"
// "c" and "d" 被忽略了因为它们没有被引用
普通索引
当格式说明符既不包含显示索引也不包含'<'
标志时,使用普通索引。每个使用普通索引的格式说明符都被分配参数列表的顺序隐式索引,该索引独立于显式或相对索引使用的索引。
formatter.format("%s %s %s %s", "a", "b", "c", "d")
//输出 "a b c d"
可以有一个格式字符串使用所有形式的索引,例如:
formatter.format("%2$s %s %<s %s", "a", "b", "c", "d")
//输出 "b a a b"
// "c" and "d" 被忽略了因为它们没有被引用
2.6获取字符串长度
s.length()
2.7相等性比较
s.equals(t) | 比较是否包含相同的字符串序列 |
s.equalsIgnoreCase(t) | 比较是否包含相同的字符串序列,不区分大小写 |
s == t(谨慎使用) | 比较字符串是否同一个对象的引用 |
3.文本块(Text Block)
文本块 由零个或多个由开始定界符( """
)和结束分隔符( """
)包围的字符组成。
当需要多行字符串时,文本块通常比字符串的串联更具可读性。
//字符串
String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
//文本块
String html = """
<html>
<正文>
<p>你好,世界</p>
</正文>
</html>
""";
4.转义序列
续行转义序列只可以出现在文本块中,但不能出现在字符(char
)或字符串(string
)中。
转义序列 | 名称 | Unicode |
\b | 退格 | \u0008 |
\s | 空格 | \u0020 |
\t | 水平制表符 | \u0009 |
\n | 换行符 | \u000a |
\f | 换页 | \u000c |
\r | 回车 | \u000d |
\ | 续行(只可以出现在文本块中) | 没有 Unicode 表示 |
\” | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/java/javalang/7011.html