《JAVA核心技术(卷1)》读书笔记03-数据类型
字符串
Java 没有内置的字符串类型,而是在标准Java 类库中提供了一个预定义类,
很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例。
子串
String类的substring方法可以从一个较大的字符串提取一个子串。例如:
1 | String greeting = "Hello"; |
substring 方法的第二个参数是不想复制的第一个位置。这里要复制位置为0、1 和2 (从0 到2, 包括0 和2 ) 的字符。在substring 中从0 开始计数,直到3 为止,但不含3。substring 的工作方式有一个优点:容易计算子串的长度。字符串s.substring(a,b) 的长度为b-a 。例如,子串“ Hel”的长度为3-0=3 。
拼接
Java 语言允许使用+ 号连接(拼接)两个字符串。
1 | String expletive = "Expletive"; |
当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。
如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态join方法:
1 | String all = String.join("/", "S", "M", "L", "XL"); |
检测字符串是否相等
可以使用equals 方法检测两个字符串是否相等。如:
1 | s.equals(t) |
如果字符串s 与字符串t 相等,则返回true ; 否则,返回false。需要注意,s 与t 可以是字符串变量,也可以是字符串字面量。
如果想要检测2个字符串是否相等,而不区分大小写,可以用equalsIgnoreCase 方法。
一定不要使用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
空串与null串
空串””是长度为0 的字符串。可以调用以下代码检查一个字符串是否为空:
1 | if (str.length() == 0){} |
空串是一个Java 对象,有自己的串长度(0 ) 和内容(空)。不过,String 变量还可以存放一个特殊的值,名为null , 这表示目前没有任何对象与该变量关联。要检查一个字符串是否为null , 要使用以下条件:
1 | if (str == null){} |
有时要检查一个字符串既不是null 也不为空串,这种情况下就需要使用以下条件:
1 | if (str != null && str.length() != 0){} |
输入输出
读取输入
前面已经看到,打印输出到“ 标准输出流”(即控制台窗口)是一件非常容易的事情,只要调用System.out.println 即可。然而,读取“标准输人流” System.in 就没有那么简单了。要想通过控制台进行输人,首先需要构造一个Scanner 对象,并与“ 标准输入流” System.in 关联。
1 | Scanner in = new Scanner(System.in) |
现在,就可以使用Scanner 类的各种方法实现输入操作了。例如,nextLine 方法将输入一行。
1 | System.out.print("What is your name? "); |
格式化输出
可以使用SyStem.0Ut.print(x) 将数值x 输出到控制台上。这条命令将以x 对应的数据类型所允许的最大非0 数字位数打印输出X。例如:
1 | double x= 10000.0 / 3.0; |
Java SE 5.0 沿用了C语言库函数中的printf方法。例如,调用
1 | System.out.printf("%8.2f", x); |
可以用8 个字符的宽度和小数点后两个字符的精度打印x。也就是说,打印输出一个空格和7 个字符,如下所示:
1 | 333.33 |
在printf中,可以使用多个参数,例如:
1 | System.out.printf("Hello,%s. Next year, you'llbe %d",name,age); |
每一个以%字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:f 表示浮点数,s 表示字符串,d 表示十进制整数。
文件输入与输出
要想对文件进行读取,就需要一个用File 对象构造一个Scanner 对象,如下所示:
1 | Scanner in =new Scanner(Paths.get("myflle.txt"),"UTF-8"); |
如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠:“ c:\mydirectory\myfile.txt”