week 6 使用对象
6.1 字符类型
字符类型
- 单个的字符类型是一种特殊的类型:char
- 用单引号来表示的字符字面量:‘a’、‘1’
- Java使用Unicode来表示字符,可以表达包括汉字在内的多种文字
字符计算
- 一个字符加一个数字,得到Unicode码表中那个数字之后的字符
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
char c = '汉';
c++;
System.out.println(c); //输出结果是 汊 这个字。
}
- 两个字符的减,得到它们在表中的距离。
- char也可以和int之间互相赋值。
(因为是采用Unicode码表,所以 char c = 'A';
、 char c = 65
、char c = \u0041
,输出的时候都是指同一个字符 ‘A’,\u0041是16进制表示法)
大小写转换:
- 字母和数字在Unicode表中是顺序排列的,并且是按从小到大的顺序排列的
- 大写字母和小写字母是分开排列的,并不在一起
'a'-'A'
可以得到两段之间的距离,于是:a+'a'-'A'
可以把一个大写字母变成小写字母a+'A'-'a'
可以把一个小写字母变成大写字母
**字符大小:**字符可以被比较大小,依据是它们在Unicode表中的编号。
- ‘0’ → 9、‘A’ →’z’、'a’→ ‘z’、 ‘Z’ < ‘a’
逃逸字符
用来表达无法印出来的控制字符或者特殊字符,它由一个反斜杠" \ "开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符。
字符 | 意义 | 备注 |
---|---|---|
\b | 回退一格 | 不是指删除,而是向左移动一个字符,并在此位置开始输出后面的字符 |
eclisepe里的控制台无法显示,可以到命令台去跑一下看看 | ||
\t | 到下一个表格位 | 一个\t使得输出从下一个制表位开始,用\t使得上下两行对齐 |
\n | 换行 | 源自打字机的动作 |
\r | 回车 | 源自打字机的动作 |
\" | 双引号 | |
\’ | 单引号 | |
\\ | 反斜杠本身 |
6.2 包裹类型
对于基本数据类型,Java提供了对应的包裹(wrap)类型。这些包裹类型将一个基本数据类型的数据转换成对象的形式,从而使得它们可以像对象一样参与运算和传递。
基本类型 | 包裹类型 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Interger |
long | Long |
float | Float |
double | Double |
除了int和char以外,包裹类型就是把基本类型的名字的第一个字母大写。在Java的系统类库中,所有第一个字母大写的,都是类的名字。所以在编辑程序的时候,一定要小心大小写,以免一不小心犯错。
包裹类型的用处:
-
获得该类型的最大值和最小值
Integer.MIN_VALUE
Integer.MAX_VALUE
.运算符
当需要让一个类或者对象做事情的时候,用.运算符。在.的左边,是一个对象或者类,.的右边是这个对象或者类能提供给你的一些服务、或者数据,或者能够做的一些动作。
a.length
Integer.MIN_VALUE
character举例:
static boolean isDigit(char ch) 判断这个字符是不是数字 |
---|
static boolean isLetter(char ch) 判断这个字符是不是字母 |
**static boolean isLetterOrDigit(char ch) **判断这个字符是不是字母或者数字 |
**static boolean isLowerCase(char ch) ** 判断这个字符是不是小写字母 |
static boolean isUpperCase(char ch) 判断这个字符是不是大写字母 |
static boolean isWhitespace(char ch) 判断这个字符是不是一种空格 |
static char toLowerCase(char ch) 把这个字符转换成小写 |
static char toUpperCase(char ch) 把这个字符转换成大写 |
6.3 字符串
字符串
字符串:
- 用双引号括起来的0个或多个字符就是一个字符串字面量
字符串变量:
对于 String s;
- String是一个类,String的变量是对象的管理者而非所有者,就像数组变量是数组的管理者而非所有者一样
new = 创建
Stirng s = new String("a string");
- 创建了一个String的对象
- 用"a Sting"初始化这个对象
- 创建管理这个对象的变量
- 让s管理这个对象
初始化字符串变量
String s = "hello";
编译器帮你创建一个String类的对象交给s来管理。
字符串连接
-
用加号(+)可以 连接两个字符串。
“hello”+“world"→"helloworld”
-
当这个+的一边是字符串而另一边不是时,会将另一边表达为字符串然后做连接
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = new String("Hello");
System.out.println(12+24+s); //输出36hello
System.out.println(s+12+24); //输出hello1224
System.out.println(s+(12+24)); //输出hello36
}
输入字符串
-
in.next(); 读入一个单词,单词的标志是空格
空格包含空格、tab和换行
-
in.nextLine(); 读入一整行
字符串变量
**对象变量的赋值:**并未直接得到具体的值,而是指向了同一串数据,拥有同样“管理权”。
比较两个string:
字符串操作
- 字符串是对象,对它的所有操作都是通过"."这个运算符来进行的
- 格式:字符串. 操作
- 它表示对.左边的这个字符串做右边的操作,这里的字符串可以是变量也可以是常量。
Strings大小的比较:
-
两个字符串可以比较大小:
如果s1比s2小,那么结果是负的;如果s1和s2相等,那么结果是0;如果s1比s2大,那么结果是正的。
-
compareToIgnoreCase 可以不分大小地来比较大小。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = "abc";
String s2 = "abb";
String s3 = "abcd";
System.out.println(s3.compareTo(s2));
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println("abcd".compareTo(s3));
}
获得String的长度
访问String里的字符
-
s.charAt(index)
- 返回在index上的单个字符
- index的范围是0到length()-1
- 第一个字符的index是0,和数组一样
-
但不能用for-each循环来遍历字符串
public static void main(String[] args) { Scanner in = new Scanner(System.in); String s1 = "abc"; for(int i = 0; i < s1.length(); i++) { System.out.println(s1.charAt(i)); } }
得到子串
- s.substring(n) 得到从n好位置到末尾的全部内容
- s.substring(b,e) 得到从b号位置到e号位置之前的内容
寻找字符
-
s.indexOf( c ) 得到c字符所在的位置,-1表示不存咋
-
s.indexOf(c,n) 从n号位置开始寻找C字符
-
s.indexOf(t) 找到字符串t所在的位置
-
从右边开始找
- s.lastIndexOf©
- s.lastIndexOf(c,n)
- s.lastIndexOf(t)
public static void main(String[] args) { Scanner in = new Scanner(System.in); String s1 = "0123A563789汉字"; int loc = s1.indexOf('3'); System.out.println(s1.indexOf('4')); System.out.println(s1.indexOf('A')); System.out.println(s1.indexOf("A56")); System.out.println(s1.indexOf('3',loc)); System.out.println(s1.indexOf('3',loc+1)); }
其他String操作
- s.stratrsWith(t) 判断字符串是不是以另一个字符串开头的
- s.endsWith(t) 判断字符串是不是以另一个字符串结尾的
- s.trim() 删掉字符串两端的空格
- s.replace(c1,c2) 把字符串里的C1都换成C2
- s.toLowerCase() 转大写
- s.toUpperCase() 转小写
不可变的String
- 所有的字符串都是不可变的,对它们的操作的结果都是制造新的字符串出来
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = "abcd";
s1.toUpperCase();
System.out.println(s1);
String s2 = s1.toUpperCase();
System.out.println(s2);
}
在switch-case中使用字符串