字符 与 字符串Characters and Strings
概览
字符
什么是
一个文字
字面量
用单引号括起来
1 2 3 char number = '9';char letter = 'Z';char ideographic = '赵';
注意
有且只能有一个字符,不能多,不能少
1!2!char empty = '';char zzax = 'ZZAX';
字符串
什么是
一堆字符
字符数组
字面量
双引号括起来
1 2 String brand = "ZZAX";String letter = "Z";
空字符串
数组可以没有元素
字符串也可以没有字符
1 String empty = "";
字符Characters
字符实质
一本字典
每页有一个字
存储页数
标准
ASCII 表
远古小字典
Unicode 表
地球大字典
运算
char
可以视为 int
进行数学计算
尺寸 比 int
小
1 2 char c1 = 'A';char c2 = (char)(c1 + 32);
运算时的类型问题
char
和 char
运算的结果 是 int
1 2 char c1 = 'A';char c2 = (char)(c1 + 'a' - 'A');
类型决定打印效果
1 2 <3 4 <char c1 = 'A';Console.println(c1);A int pageNumber = c1;Console.println(pageNumber);65
特殊字符Special Characters
单双引号问题
问题
'
和 "
也是字符,如何在字符和字符串里表达这两个字符
1 2!3 4!char c1 = '"';char c2 = ''';String s1 = "'";String s2 = """;
''
内无法表达 '
因为 会被视为 字符结束
""
内无法表达 "
因为 会被视为 字符串结束
解决方案
1 2 char c = '\'';String s = "\"";
转义字符Escape Character
\
作用
能解除 右侧字符的语法意义
能转移 右侧字符的本身意义
\ + 语法意义的" -> 没有语法意义的" \ + 语法意义的' -> 没有语法意义的' \ + 用于转义的\ -> 没有转义功能的\
换行符
\ + 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
字符 常用函数Characters API
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'
boolean isDigit(char c)
返回 c
是不是一个数字
1 2 =char c = 'a';boolean test = Characters.isDigit(c);false
内容意义上的 char 转 int
方法 1
1 2 =char c = '1';int v = c - '0';1
方法 2
1 2 =char c = '1';int v = Characters.getNumericValue(c);1
字符串 常用函数String API
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'
挑战
大小写格式化
输入一个单词,把它变成大写开头的命名格式
> <chAR Char
int indexOf(int ch)
返回 ch 作为字符 第一次出现的位置索引值
如果没有,会返回 -1
1 2 =String str = "ZZAX";int index = str.indexOf('A');2
int indexOf(String s)
返回 s 第一次出现的位置索引值
如果没有,会返回 -1
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 indexOf(int ch, int fromIndex)
从 fromIndex 的位置,从左往右开始找,返回 ch 作为字符 第一次出现的位置
1 2 =String str = "ZZAX";int index = str.indexOf('Z', 1);1
int indexOf(String s, int fromIndex)
从 fromIndex 的位置,从左往右开始找,返回 s 第一次出现的位置
1 2 =String str = "ZZAX";int index = str.indexOf("Z", 1);1
int lastIndexOf(int ch)
从右往左找,ch 作为字符,第一次出现的位置
1 2 =String str = "ZZAX";int index = str.lastIndexOf('Z');1
int lastIndexOf(String s)
从右往左找,s 第一次出现的位置
1 2 =String str = "ZZAX";int index = str.lastIndexOf("Z");1
挑战
字符串解析
用户输入一行 java 代码,解析里面是否有 字符串字面量,
如果有,则把字符串的内容扣出来
案例
> <String str = "ZZAX"ZZAX
String trim()
返回一个新的字符串,内容是原始字符串消掉两边多余的空格
1 2 =String str = " hi ha ";String trimmedStr = str.trim();"hi ha"
字符串 转 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"
挑战
坐标
一个消息里有个坐标信息,格式为
"x, y"
根据坐标信息,把里面的值扣出比一比,x 和 y 哪个更长
案例
> <1, 2x < y
字符串比较
错误
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");}
字符串 拼接与构建String Concatenation
字符串拼接
+
运算符 可以将 字符串 和 其它内容 拼接
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
字符串构建
注意:字符串不支持修改,没有任何办法,可以修改一个字符串。
如果我们需要修改字符串,我们只能重建一个字符串
案例
写一个函数,将 字符串 改为 大写开头的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public void run() { String word = "aRc"; Console.println(format(word));} public String format(String original) { String formatted = ""; for(int i = 0; i < original.length; i++) { char c = original.charAt(i); c = i == 0 ? Character.toUpperCase(c) : Character.toLowerCase(c); formatted += c; } return formatted;}
字符串 格式化显示Formatting Print Output
使用 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,