字符串

Java 没有内置的字符串类型,而是在标准Java 类库中提供了一个预定义类,
很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例。

子串

String类的substring方法可以从一个较大的字符串提取一个子串。例如:

1
2
String greeting = "Hello";
String s = greeting.substring(0,3);

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
2
3
String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;

当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。

如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态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
2
3
if (str.length() == 0){}
//或
if (str.equals("")){}

空串是一个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
2
System.out.print("What is your name? ");
String name =in.nextLine();

格式化输出

可以使用SyStem.0Ut.print(x) 将数值x 输出到控制台上。这条命令将以x 对应的数据类型所允许的最大非0 数字位数打印输出X。例如:

1
2
3
4
double x= 10000.0 / 3.0;
System.out.print(x);
# 输出
3333.3333333333335

Java SE 5.0 沿用了C语言库函数中的printf方法。例如,调用

1
System.out.printf("%8.2f", x);

可以用8 个字符的宽度和小数点后两个字符的精度打印x。也就是说,打印输出一个空格和7 个字符,如下所示:

1
333.33

在printf中,可以使用多个参数,例如:

1
2
System.out.printf("Hello,%s. Next year, you'llbe %d",name,age);

每一个以%字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:f 表示浮点数,s 表示字符串,d 表示十进制整数。

文件输入与输出

要想对文件进行读取,就需要一个用File 对象构造一个Scanner 对象,如下所示:

1
2
Scanner in =new Scanner(Paths.get("myflle.txt"),"UTF-8");

如果文件名中包含反斜杠符号,就要记住在每个反斜杠之前再加一个额外的反斜杠:“ c:\mydirectory\myfile.txt”