Lesson 12
字符 与 字符串Characters and Strings
特殊字符
单双引号问题
问题
'
和 "
也是字符,如何在字符和字符串里表达这两个字符
1 2!3 4!char c1 = '"';char c2 = ''';String s1 = "'";String s2 = """;
''
内无法表达 '
因为 会被视为 字符结束
""
内无法表达 "
因为 会被视为 字符串结束
解决方案
1 2 char c = '\'';String s = "\"";
转义字符
\
作用
能解除 右侧字符的语法意义
能转移 右侧字符的本身意义
\ + 语法意义的" -> 没有语法意义的" \ + 语法意义的' -> 没有语法意义的' \ + 用于转义的\ -> 没有转义功能的\
换行符
\ + n -> 换行符
效果
换行
案例
1 < < <Console.println("a\nb");ab
制表符
\ + t -> 制表符
效果
补充空格 到 4的倍数的列数
4 这个数 可以被改成别的,取决于编辑器
案例
1 2 3 4 < < < < <Console.println("a\tb");Console.println("aa\tbb");Console.println("aaa\tbbb");Console.println("aaaa\tbbb");a baa bbaaa bbbaaaa bbbb
制表符与空格
敲代码时,按 tab
有些 编辑器,敲进去的是 空格
有些 编辑器,敲进去的是 制表符
肉眼是无法区分的
案例
1 2 < < <Console.println("a\tb");Console.println("a b");a ba b
字符 常用函数
boolean isDigit(char c)
返回 c
是不是一个数字
1 2 =char c = 'a';boolean test = Characters.isDigit(c);false
boolean isLetter(char c)
返回 c
是不是一个字母
1 2 =char c = 'a';boolean test = Characters.isLetter(c);true
boolean isLowerCase(char c)
返回 c
是不是一个小写字母
1 2 =char c = 'a';boolean test = Characters.isLowerCase(c);true
boolean isUpperCase(char c)
返回 c
是不是一个大写字母
1 2 =char c = 'a';boolean test = Characters.isUpperCase(c);false
char toLowerCase(char c)
返回 c
对应的小写字母
1 2 =char c = 'a';c = Characters.toLowerCase(c);'a'
char toUpperCase(char c)
返回 c
对应的大写字母
1 2 =char c = 'a';c = Characters.toUpperCase(c);'A'
字符串 常用函数
int length()
返回字符串的长度, 也就是检查这个字符串里有几个字符
1 2 =String str = "ZZAX";int length = str.length();4
char charAt(int index)
获取在 index
位置上的字符
1 2 =String str = "ZZAX";char c = str.charAt(0);'Z'
int indexOf(char c)
返回 c
字符第一次出现的位置
1 2 =String str = "ZZAX";int index = str.indexOf('A');2
String substring(int startIndex)
返回从 startIndex
开始到结尾的字符串
1 2 =String str = "ZZAX";String subStr = str.substring(2);"AX"
String substring(int startIndex, int endIndex)
返回 从 startIndex
到 endIndex
区间内的字符串
不包含 endIndex
1 2 =String str = "ZZAX";String subStr = str.substring(2, 3);"A"
字符串 转 int
1 2 =String str = "9917";int value = Integer.parseInt(str);9917
int 转 字符串
1 2 3 =int value = 9917;String str1 = Integer.toString(value);String str2 = value + "";"9917"
字符串比较
错误
1 2 3 4 5 String str1 = "abc";String str2 = "abc";if (str1 == str2) { System.out.println("same");}
正确
1 2 3 4 5 String str1 = "abc";String str2 = "abc";if (str1.equals(str2)) { System.out.println("same");}
挑战
表情包
消息里有一个 表情,请把表情文字扣出来
> <"哈哈哈 [白眼]""白眼"
坐标
一个消息里有个坐标信息,格式为
"(x, y)"
x 越往右越大,y 越往下越大
根据坐标信息,找出坐标的方位。
案例1
> <"(1, 2)""南"
案例2
> <"(-4, 1)""西"
字符串格式化显示
字符串的拼接
+
运算符 可以将 字符串 和 其它内容 拼接
1 2 3 4 int x = 3;int y = 4;String location = "(" + x + ", " + y + ")";Console.println(location);
注意优先级
+
运算符 还有数值计算的意义, 结合时从左往右结合
如果结合时, 左右两边有一个是字符串, 就是字符串拼接效果
如果结合时, 左右两边都是数值, 就是数值加法效果
1 <2 <3 <4 <Console.println("ZZAX" + 1 + 1);ZZAX11Console.println(1 + 1 + "ZZAX");2ZZAXConsole.println("ZZAX" + 'a' + 'a');ZZAXaaConsole.println('a' + 'a' + "ZZAX");aaZZAX
使用 format 拼接
制造一个模板,然后完形填空
1 2 3 4 <int x = 3;int y = 4;String location = String.format("(%d, %d)", x, y);Console.println(location);(3, 4)
填空
%d
表明缺失一个整数
%f
表明缺失一个小数
%s
表明缺失一个字符串
%%
是 一个 %
Format 高级控制
基本款
1 2 3 <int a = 9917String str = String.format("%d,", a);Console.println(str);9917
固定长度左对齐
1 2 3 <int a = 9917String str = String.format("%-10d,", a);Console.println(str);9917 ,
固定长度右对齐
1 2 3 <int a = 9917String str = String.format("%10d,", a);Console.println(str); 9917,
固定长度右对齐,左侧补0
1 2 3 <int a = 9917String str = String.format("%010d,", a);Console.println(str);0000009917,
控制小数点
1 2 3 <double d = 99.17String str = String.format("%.1f,", d);Console.println(str);99.2,