Java字符串

字符串类型是用双引号括起来的,而char类型是用单引号。这点和C是一样的。

char c = 'a';
String str = "abc";

PHP程序员在学习java的时候一个常见错误就是用单引号将字符串括起来。

String str = "hello java";

其实上述的代码与下列代码是一样的:

String str = new String(new char[] {'h', 'e', 'l', 'l', 'o', ' ', 'j', 'a', 'v', 'a'});

因为字符串实在太常用了,所以就有了字面量的表示方法。

子串

String类中的substring方法可以从一个较大的字符串中提取一个子串。它的用法和php中的substr函数有些区别。主要区别在于第二个参数,substring的第二个参数表示某尾的位置,并且不能使用负数。

所以下面在Java中是有问题的:

String str = "language";
String s2 = str.substring(3,2);  // 错误,后面的数必须比前面的大
String s3 = str.substring(0,-1);  // 错误,不可以为负数

下面看在java中该方法是如何使用的

  • 第一个参数表示截取的开始位置,是必须的
  • 第二个桉树表示截取的某尾位置,不是必须的。如果没有,则从开头位置截取到最后。
String str = "PHP JAVA C++";

String s1 = str.substring(4);  // JAVA C++
String s2 = str.substring(4,8); // JAVA

拼接

和js一样,java可以使用“+”操作符来连接两个字符串.

String str = "hello" + " world";

和js一样,当一个字符串与一个非字符串进行拼接时,会返回一个字符串类型。

String name = "JAMES";
int age = 36;
String nameAge = name + age; // JAMES36

除了使用“+”操作符外,还可以使用静态方法join来将多个字符串用一个定界符来连接。

System.out.println(String.join("", "php", "java", "c++"));  
//phpjavac++
System.out.println(String.join("/", "php", "java", "c++"));  
//php/java/c++

空串与null

空字符串和null不相同。检测空串的方法有两种:

if (str.equals("")) {}
// or
if (str.length() == 0) {}

而检测一个字符串是否为null,可以如下

if (str == null) {}

有时候需要检查一个字符串既不为null也不为空

if (str != null && str.length() > 0) {}

需要注意的是,必须先检测不为null,因为在一个null值上调用方法,会出现错误。

码点与代码单元

常用的字符使用一个代码单元表示,而辅助字符则需要两个代码单元表示。所以绝大情况下,一个字符串的代码单元数量等于码点数量。可以将码点看成字符串中的字符,字符串中码点数量等于字符数量。如果字符串中含辅助字符的话,那么代码单元的数量就比码点数要大。

String str = "𝕆 is the set of octonions";

int n = str.length(); // 代码单元数量 26
int cp = str.codePointCount(0, n);  // 字符数(码点数)25

因为字符串中含一个辅助字符𝕆,所以该字符串的码点数比代码单元数少1。

调用s.charAt(n)将返回位置n的代码单元,n介于0~s.length()-1之间,例如:

char i = str.charAt(3);  // i
char last = str.charAt(n-1); // s