精读《Java核心技术-卷Ⅰ》-字符串
从概念上讲,Java字符串就是Unicode字符序列。例如,串“Unicode”就是由7个Unicode字符U、n、i、c、o、d、e组成的。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每一个用双引号括起来的字符串都是Stirng类的一个实例。
Java语言中的字符串和C++字符串有一个非常大的不同,Java中的String类没有提供用于修改字符串的方法。例如,如果希望将greeting字符串变量中的内容“Help!”改为“Hello”,不能直接将greeting的后两个字符修改为'l'和'o'。而修改的方法则是需要依赖两个步骤,即先将字符串进行截断,然后再将修改的目标拼接到截取的字符串上,从而完成对字符串的修改。
下面为您介绍Java语言中String类的几个常用方式,分别是:子串的获取(截取)、拼接,以及字符串的检测。
1.子串的获取(截取)
String类的substirng方法可以从一个较大的字符串提取出一个子串,例如:
String greeting = “Hello”;
String s = greeting.substring(0,3);
这两个语句创建了一个由字符“Hel”组成的字符串。还有一点是需要您注意的就是,这种子串的获取是对原字符串没有影响的。另外,sustring方法还有一个非常好的优点,即后面的参数值减去前面的参数值,就是子串的长度。
2.字符串的拼接
与绝大多数的程序设计语言一样,Java语言允许使用+号连接(拼接)两个字符串。而且,最关键的是,在Java语言中,不仅可以使用+号拼接两个字符串,而且可以使用一个字符串拼接一个非字符串的变量。例如:
int age = 15;
String rating = “PG” + age;
此时,rating被设置为“PG15”。Java语言的这种特性经常被使用在输出语句中,例如:
System.out.println(“The answer is ” + answer);
这是一条合法的语句,并且会打印出所希望的结果。
3.字符串的比较(相等的比较)
在Java语言中,绝对不能使用“==”检测两个字符串是否相等。因为这个运算符只能够确定两个字符串是否被放置在同一个位置上。当然,如果字符串确实是放置在同一个位置上,它们必然相等,但是,两个字符串不放在同一个位置的时候还是非常多的,因为在进行编程时+和substring使用是非常频繁的,这两个操作的结果就是导致字符串不共享,所以,对字符串进行是否相等的判断时,绝对不能使用“==”。
进行字符串的相等性判断,应该使用String类提供的一个方法,即s.equals(a)方法。该方法的含义是,如果字符串s和字符串相等,则返回true,否则返回false。
说到这里,您可能一直有一个疑问,为什么Java语言中的字符串不允许修改单个字符呢?首先,我们需要说清楚的是,Java语言不能修改字符串,给字符串带来了一个优点,就是Java编译器可以让字符串共享。也就是说,Java语言中的字符串其实是放在一个共享池中的,字符串变量的值只是一个指向存储池中位置的引用,如果复制一个字符串变量,原始字符串与复制的字符串其实并不是两份,而是共享相同的字符。其次,在这个基础上,Java设计者认为共享带来的高效率远远胜过修改字符串所带来的低效率。因为查看一下程序你就会发现,其实很少需要修改字符串,而是往往需要对字符串进行比较。
上面就是Java语言中字符串的相关特性,下一节中,将会为你介绍Java语言中的数组特性。我是徐建航,这是我写的第10篇文章,欢迎你加入007社群,七天写一篇,一起写七年,七年之后一起去南极。
