您的位置:首页 > 编程语言 > Java开发

java学习笔记---String类

2007-03-07 17:21 375 查看
Sting类:final class
一、Sring常量与String对象:
String s1 = “hello”;-------------------创建String常量;值保存在常量池中
String s2 = new String(“hello”)-------创建String对象,s2保存的是内存空间地址;
例:
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
s1 == s2; // 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]+" ");
}
}
运行结果 :
中国 北京 海淀 学院路
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: