1.字符char
字符数据类型用于表示单个字符。
字符数据类型char用于表示单个字符。字符型字面值用单引号括住。
char a = 'A';
char b = '4';
char c = '\u041'; // A的Unicode
字符串字面值必须括在双引号中。而字符字面值是括在单引号中的单个字符。因此"A"是一个字符串,而’A’是一个字符。
1.1 编码
常用字符的 ASCII码
字符 | 十进制编码值 | Unicode 值 |
---|---|---|
‘0’~‘9’ | 48~57 | u0030~\u0039 |
‘A’~‘Z’ | 65 ~ 90 | \u0041~\u005A |
‘a’~'Z‘ | 97 ~ 122 | \u0061 ~\u007A |
自增和自减操作符也可用在char型变量上,这会得到该字符之前或之后的Unicode 字符。
1.2 转义字符
转义序列 | 名称 |
---|---|
\b | 退格键 |
\t | Tab 键 |
\n | 换行符 |
\f | 换页符 |
\r | 回车符 |
\\ | 反斜杠 |
\" | 双引号 |
1.3 char的类型转换
//将整数转换成char型数据时只用到该数据的低十六位,其余部分都被忽略。
char ch=(char)0XAB0041; //0041,即A
//将一个浮点值转换成char型时,首先将浮点值转换成int型,然后将这个整型值转换为 char 型。
char ch=(char)65.25; //65,即A
//char型数据转换成数值型时,这个字符的Unicode 就被转换成某个指定的数值类型。
int i=(int)'A'; //65
//如果转换结果适用于目标变量,就可以使用隐式转换方式;否则,必须使用显式转换方式。
byte b='a';
int i ='a';
//但是,因为Unicode 码 \uFFF4超过了一个字节的范围,所以下面的转换就是不正确的:
byte b='\uFFF4';
//为了强制赋值,就必须使用显式转换方式
byte b=(byte)'\uFFF4';
所有数值操作符都可以用在char型操作数上。如果另一个操作数是一个数字或字符,那么char型操作数就会被自动转换成一个数字。如果另一个操作数是一个字符串,字符就会与该字符串相连。
1.4 字符的比较
两个字符可以使用关系操作符进行比较,如同比较两个数字一样。这是通过比较两个字符的 Unicode 值实现的。
if(ch>='A&& ch <=Z')
System.out.println(ch+"is an uppercase letter");
else if(ch>='a'&& ch <='z')
System.out.println(ch+"is a lowercase letter");
else if(ch>='0'&& ch <='9')
System.out.println(ch+"is a numeric character");
1.5 Character类
方法 | 描述 |
---|---|
isDigit(ch) | 如果指定的字符是一个数字,返回 true |
isLetter(ch) | 如果指定的字符是一个字母,返回 tue |
isLetterOrDigit(ch) | 如果指定的字符是一个字母或者数字,返回true |
isLowerCase(ch) | 如果指定的字符是一个小写字母,返回true |
isUpperCase(ch) | 如果指定的字符是一个大写字母,返回true |
toLowerCase(ch) | 返回指定的字符的小写形式 |
toUpperCase(ch) | 返回指定的字符的大写形式 |
2.String类型
char 类型只表示一个字符。为了表示一串字符,可以使用称为String(字符串)的数据类型。
String message = "Hello World"
2.1 String对象常用的方法:
实例方法(只能从一个特定的字符串实例调用) | 描述 |
---|---|
length() | 返回字符串中的字符数 |
charAt(index) | 返回字符串中指定位置的字符 |
concat(s1) | 将本字符串和字符串s1连接,返回一个新字符串 |
toUpperCase() | 返回一个新字符串,其中所有的字母大写 |
toLowerCase() | 返回一个新字符串,其中所有的字母小写 |
trim | 返回一个新字符串,去掉了两边的空白字符 包括’ ’ \t \f \r \n等 |
除了concat方法外。可以使用加号(+)连接两个或多个字符串。若要用加号实现连接功能,至少要有一个操作数必须为字符串。如果操作数之一不是字符串(比如,一个int或者char),非字符串值转换为字符串,并与另外一个字符串连接。如果操作数都不是字符串,加号(+)是一个将两个数字相加的加法操作符。
另外,增强的+=操作符也可以用于字符串连接。
2.2 从控制台读取字符串
为了从控制台读取字符串,可以调用Scanner对象上的next()方法。
Scanner input = new Scanner(System.in);
String s1 = input.next()
next()方法读取以空白字符结束的字符串(’ ‘、’\t’、‘\f’、‘\r’或’\n’)。。nextLine()方法读取以按下回车键为结束标志的字符串。
- next()、nextByte()、nextShort()、nextInt()、nextLong()、nextF1oat()、nextDouble()的输入称为基于标记的输人,因为它们读取采用空白字符分隔的单个元素。
- nextLine()方法称为基于行的输入,读取以按下回车键为结束标志的字符串。
- 为了避免输入错误,程序中不要在基于标记的输入之后使用基于行的输入
2.3 从控制台读取字符
从控制台读取字符,调用nextLine()方法读取一个字符串,然后在字符串上调用charAt(0)来返回一个字符。
Scanner input = new Scanner(System.in);
String s = input.nextLine();
char ch = s.charAt(0);
2.4 字符串的比较
方法 | 描述 |
---|---|
equals(s1) | 如果该字符串等于字符串 s1,返回 true |
equalsIgnoreCase(s1) | 如果该字符串等于字符串 s1,返回 true;不区分大小写 |
compareTo(s1) | 返回一个大于0、等于0、小于0的整数,表明该字符串是否大于等于或者小于s1 |
compareToIgnoreCase(s1) | 和compareTo 一样,除了比较是不区分大小写的外 |
startsWith(prefix) | 如果字符串以特定的前缀开始,返回 true |
endsWith(suffix) | 如果字符串以特定的后缀结束,返回 true |
contains(s1) | 1是该字符串的子字符串,返回true |
- 操作符==只能检测string1和string2是否指向同一个对象,但不会告诉它们的内容是否相同。
- 方法compareTo返回的实际值是依据s1和s2从左到右第一个不同字符之间的距离得出的。假设s1为"abc",s2为"abg",那么s1.compareTo(s2)返回-4。首先比较的是s1与s2中第一个位置的两个字符(a与a)。因为它们相等,所以比较第二个位置的两个字符(b与b)。因为它们也相等,所以比较第三个位置的两个字符(c与g)。由于字符c比字符g小4,所以比较之后返回-4。
- 如果使用像>、>=、<或<= 这样的比较操作符比较两个字符串,就会发生语法错误,
2.5 子串和字符
方法 | 描述 |
---|---|
substring(beginIndex) | 返回该字符串的子串,从指定位置beginIndex的字符开始到字符串的结尾 |
substring(beginIndexendIndex) | 返回该字符串的子串,从指定位置beginIndex的字符开始到下标为endIndex-1的字符 (如果 beginIndex==endIndex,返回一个长度为0的空字符串。如果beginIndex>endIndex,将发生运行时错误。) |
indexOf(ch) | 返回字符串中出现的第一个ch的下标。如果没有匹配的,返回-1 |
index0f(ch,fromIndex) | 返回字符串中fromIndex之后出现的第一个ch的下标。如果没有匹配的,返回-1 |
indexOf(s) | 返回字符串中出现的第一个字符串s的下标。如果没有匹配的,返回-1 |
indexOf(s,fromIndex) | 返回字符串中fromIndex之后出现的第一个字符串s的下标。如果没有匹配的,返回-1 |
lastIndexOf(ch) | 返回字符串中出现的最后一个ch的下标。如果没有匹配的,返回-1 |
lastIndex0f(ch,fromIndex) | 返回字符串中 fromIndex之前出现的最后一个ch的下标。如果没有匹配的,返回 -1 |
lastIndexOf(s) | 返回字符串中出现的最后一个字符串s的下标。如果没有匹配的,返回-1 |
lastIndexOf(s,fromIndex) | 返回字符串中fromIndex之前出现的最后一个字符串s的下标。如果没有匹配的,返回-1 |
2.6 字符串的转化
- 可以将数值型字符串转换为数值。(如果字符串不是数值型字符串,转换将导致一个运行时错误)
- 要将字符串转换为int值,使用Integer.parseInt.要将字符串转换为 double值,使用 Double.parseDouble.
int intValue = Integer.parseInt(intString);
double doubeValue = Double.parseDouble(doubleString);
- 如果字符串不是数值型字符串,转换将导致一个运行时错误。Integer 和Doub1e 类都包含在 java.1ang包中,因此它们是自动导人的。
- 将数值转换为字符串,只需要简单使用字符串的连接操作符连接一个空字符串即可
String s=number +"";
2.7 格式化控制台输出
可以使用 System.out.printf方法在控制台上显示格式化输出。
double amount=12618.98;
double interestRate=0.0013;
double interest =amount*interestRate;
System.out.printf("Interest is $ %4.2f",interest);
printf中的f代表格式(format),暗示着方法将以某种格式来打印。调用这个方法的语法是:
System.out.printf(format,item1,item2...itemk);
格式限定符指定每项应该如何显示。这里的项可以是数值、字符、布尔值或字符串。简单的格式标识符是以百分号(%)开头的转换码。
限定符 | 输出 |
---|---|
%b | 布尔值 |
%c | 字符 |
%d | 十进制整数 |
%f | 浮点数 |
%e | 标准科学记数法形式的数 |
%s | 字符串 |
举例:
示例 | 输出 |
---|---|
%5c | 输出字符并在这个字符条目前面加4个空格 |
%6b | 输出布尔值,在false值前加一个空格,在true值前加两个空格 |
%5d | 输出整数项,宽度至少为5。如果该条目的数字位数小于5,就在数字前面加空格。如果该条目的位数大于5,则自动增加宽度 |
%10.2f | 输出的浮点数项的宽度至少为10,包括小数点和小数点后两位数字。这样,给小数点前分配了7位数字。如果该条目小数点前的位数小于7,就在数字前面加空格。如果该条目小数点前的位数大于7,则自动增加宽度 |
%10.2e | 输出的浮点数项的宽度至少为10,包括小数点、小数点后两位数字和指数部分。如果按科学记数法显示的数字位数小于10,就在数前加空格 |
%12s | 输出的字符串宽度至少为12个字符。如果该字符串条目小于12个字符,就在该字符串前加空格。如果该字符串条目多于12个字符,则自动增加宽度 |
// 如果要显示一个带有逗号的数字,可以在数字限定符前面添加一个逗号。
System.out.printf("%,8d%,10.1f\n",12345678,12345678.263);
// 12,345,678 12,345.678.3
// 如果要在数字前面添加0而不是空格来凑齐位数,可以在一个数字限定符前面添加0
System.out.printf("%08d %08.1f\n",1234,5.63);
// 00001234 000005.6
// 默认情况下,输出是右对齐的。可以在格式限定符中放一个减号(-),指定该项在指定域中的输出是左对齐的。
System.out.printf("%-8d%-8s%-8.1fn",1234,"Java",5.63));
System.out.printf("%8d%8s%8.1f\n",1234,"Java”,5.63);
//1234 Java 5.6
// 1234 Java 5.6
- 条目与格式标识符必须在类型上严格匹配。对应于格式标识符%f或%e的条目必须是浮点型值,例如:是40.0而不能是40。因此,int型变量不能匹配%f或%e。可以使用%.2f 来指定一个小数点后两位的浮点数值,而使用%0.2f是不正确的。
- 使用符号%来标记格式限定符,要在格式字符串里输出字面值%,需要使用 %%。