Sting
类:
final class
一、S
ring
常量与
String
对象:
String s1 = “hello”;-------------------
创建
String
常量;值保存在常量池中
String s2 = new String(“hello”)-------
创建
String
对象,
s2
保存的是内存空间地址;
例:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s2 = "hello";
String s3 = new String("hello");
s1 == s2; // true
地址相同
s1 == s3; // false 地址不同
s1.equals(s2); // true 内容相同
s1.equals(s3); // true 内容相同
s1 == s3; // false 地址不同
s1.equals(s2); // true 内容相同
s1.equals(s3); // true 内容相同
二、
String
与
StringBuffer
区别联系:(重点)
1、
联系:
String
中的所有方法几乎与
StringBuffer
一样,
StringBuffer
只多一个方法即:
StringBuffer.append();
2、
String
的劣势:
String
对象是常量字符串。一旦被初始化和赋值,它的值和所分配的内存就被固定了。如果硬要改变它的值,将会产生一个包含新值的新
String
对象。这就是
String
对象会消耗掉很多资源的原因。下面的代码创建了一个
String
对象并使用串联(
+
)符号来为它添加更多字符:
String sample1=new String(“Builder.com”);
sample1+=”is”;
sample1+=”the place”;
sample1+=”to be.”;
系统最终会创建四个
String
对象来完成上面的替换。其中第一个的文本是
Builder.com
。然后每次添加文本时都会创建一个新的对象。这就导致频繁使用
String
将
消耗太多的资源。
StringBuffer
类所要解决的正是这个问题。
StringBuffer
类被设计用与创建和操作动态字符串信息。为该对象分配的内存会自动扩展以容纳新增的文本
3、
StringBuffer
用法:
有三种方法来创建一个新的
StringBuffer
对象:使用初始化字符串、设定大小以及使用默认构造函数:
StringBuffer sb
= new StringBuffer();
StringBuffer sb = new StringBuffer(30);
StringBuffer sb = new StringBuffer(“Builder.com”);
第一行创建了不包含任何文本的对象,默认的容量是
16
个字符。类的第二个实例也不包含文本,容量是
30
个字符,最后一行创建了一个拥有初始化值的对象。
StringBuffer
类位于
java.lang
基础包中,因此要使用它的话不需要特殊的引入语句。一旦创建了
StringBuffer
类的对象,就可以使用
StringBuffer
类的大量方法和属性。
一旦创建了
StringBuffer
类的对象,就可以使用
StringBuffer
类的大量方法和属性
(
与
String
中方法和属性一样
)
。最显著的方法是
append
,它可以将任何类型添加到当前
StringBuffer
对象内容的结尾。下面的代码示例了
append
方法的语法:
StringBuffer sb=new StringBuffer();
sb.append(“B”);
sb.append(“u”);
sb.append(“i”);
sb.append(“l”);
sb.append(“d”);
sb.append(“e”);
sb.append(“r”);
这些代码创建了
”Builder”
字符串并将它送往标准输出,但是只创建了一个对象。如果使用
String
对象就需要八个以上的对象。注意代码利用了
StringBuffer
类的
toString
方法。这个方法将其内容转换成一个可以被用于输出的字符串对象。它允许操作对应的文本用于输出或数据存储。
append
方法有十种重载形式,允许将各种类型的数据添加到对象的末尾。
StringBuffer
类还提供了处理对象内部数据的方法。
三、
String
类的常用方法:
1、
String.charAt(int a):
作用:
返回指定位置的字符
;
参数:
a---
指定的位置
;
返回:
字符,
例:
String s = “abcdef”;
s.charAt(3)
返回:
d;
2
、
String.compareTo(String str)
作用:
比较两字符串
参数:
str----- -
要比较的
String
。
返回:
如果参数字符串等于此字符串,则返回
0
值;如果按字典顺序此字符串小于字符串参数,则返回一个小于
0
的值;如果按字典顺序此字符串大于字符串参数,则返回一个大于
0
的值。
例:
String str = new String("abd");
System.out.println(str.compareTo("abc"));
返回:
1;
3
、
String.substring(int a,int b);
从
a
位置到
b
位置(不包括
b
)截取字符串组成新的字符串
,
例:
String str = “abcde”; str.substring(0,3)
输出:
abc
4、
String.split(
String regex
);
虽然使用正则表达式能很好的进行字符串的解析、提取、替换,但是对于一些简单的应用,使用String类提供的一些方法就可以很好的完成,最突出的就是split方法。split方法能够很方便的将字符串按照一定的规则拆分开。
例:
String value = "Tom,Jane,Tony,Elva,Gigi";
String[] names = value.split(",");
for(int i=0; i< names.length;i++)
{
System.out.println(names[i]);
}
运行结果:
Tom
Jane
Tony
Elva
Gigi
看到这个运行结果,很多人都认为split方法就是按照给定的字符串对字符串进行拆分,知道碰到了下面的问题。
有一个字符串:“中国.北京.海淀.学院路”。请解析此字符串,并打印输出“中国北京海淀学院路”。
于是写代码如下:
String value = " 中国 . 北京 . 海淀 . 学院路 ";
String[] names = value.split(".");
for(int i=0; i< names.length;i++)
{
System.out.print(names[i]+" ");
}
运行结果:
对,没看错!没有任何输出!让我们来看看API中split方法的参数吧:
Public String[] split(String regex) 这里的参数的名称是regex,也就是Regular Expression(正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,split的实现直接调用的Matcher类的split的方法。读者已经知道,“.”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。
修改代码如下:
Private static void split2()
{
String value = "中国.北京.海淀.学院路";
String[] names = value.split("//.");
for(int i=0,n=names.length;i<n;i++)
{
System.out.print(names[i]+" ");
}
}
运行结果 :
中国 北京 海淀 学院路