2.5Java引用类型之字符串(String)

1.字符(char)

字符 由用单引号引起来的1个字符或1个转义序列组成。

//示例
'a'

'%'

'\t'

'\\'

'\''

'\u03a9'

'\uFFFF'

'\177'

'™'

2.字符串(String)

2.1字符串声明

字符串 由用双引号引起来的零个或多个字符组成。

"" // 空字符串
"\"" // 只包含 " 的字符串
"This is a string" // 包含 16 个字符的字符串

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";

//文本块
字符串 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

(1)
上一篇 2021年1月5日 22:42
下一篇 2021年1月5日 23:24

相关推荐

发表回复

登录后才能评论