从概念上讲,Java字符串就是Unicode字符序列。例如,串“Java\u2122”由五个Unicode字符J、a、v、a和TM组成。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String。每个用双引号括起来的字符都是String类的一个实例:

String e=""; //an empty string

String greeting="Hello";

1. 代码点与代码单元

Java字符串有char值序列组成。char数据类型是一个采用UTF-16编码表示的Unicode代码点的代码单元。大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量。例如:

String greeting="Hello";

int n=greeting.length();   //is 5.

要想得到实际的长度,即代码点数量,可以调用:

int cpCount=greeting.codePointCount(0,greeting.length());

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

char first = greeting.charAt(0);  //first is ‘H’

要想得到第i个代码点,应该使用下列语句

int index=greeting.offsetByCodePoints(0,i);

int cp=greeting.codePointAt(index);

2. 子串

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

String greeting="Hello";

String s=greeting.substring(0,3);

创建了一个由字符“Hel”组成的字符串。

substring的第二个参数是不希望复制的第一个代码单元。这里复制的代码单元位置为0、1、2。在substring中的计数是从0-3。

3. 字符串编辑

String类没有提供用于修改现存字符串的方法如果希望将greeting的内容改为“Help!”,不能直接地将greeting的最后两个位置的字符修改为‘p’和‘!’。在Java中实现这项操作相当容易,首先提取需要的子串,然后在拼接上需要替换的字符串。

greeting=greeting.substring(0,3) + "p!";

 

由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串,字符串“Hello”永远包含H、e、l、l和o的代码单元序列,而不能修改其中的任何一个字符。当然,可以修改字符串变量greeting的内容,让它引用一个不同的字符串,如同可以将一个存放3的数值变量改成存放4一样。

不可变字符串有一个优点:编译器可以将字符串共享

4. 拼接

Java语言允许使用+号拼接两个字符串。

String expletive="Expletive";

String PG13="deleted";

String message=expletive+PG13;

上面的代码将“Expletivedeleted”赋给变量message。

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

int age=13;

String rating="PG"+age;  //get "PG13"

5. 检测字符串是否相等。

可以使用equals方法检测两个字符串是否相等。如果字符串s与字符串t相等,则表达式s.equals(t)返回true;否则,返回false。需要注意,s与t可以是字符串变量,也可是字符串常量。例如,表达式

"Hello".equals(greeting)

是合法的。



Java代码 



  1. public class
  2. public static void
  3. "Hello";  
  4. boolean result="Hello".equals(greeting);  
  5.         System.out.print(result);  
  6.     }  
  7. }  



要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

永远不要使用==运算符检测两个字符串是否相等!!!