Java- 字符串(String,StringBuffer,StringBuilder类)

字符串

  • 字符串可以分为两大类
    • String类
      • 创建之后不会再做修改和变动,即immutable
    • StringBuffer、StringBuilder类
      • 创建之后允许再做更改和变动
      • 其中StringBuilder是JDK1.5增加的,它是非线程安全的,即未考虑多个线程同时访问的情况。
  • 特别注意
    • 在循环中使用String的+=可能会带来效率的问题
public static void main(String[] args) 
    {
        String a = "a";
        String s = "";
        StringBuffer sb = new StringBuffer();

        final int N = 10000;

        long t0 = System.currentTimeMillis();
        for( int i=0; i<N; i++) s+=a;
        long t1 = System.currentTimeMillis();
        for( int i=0; i<N; i++) sb.append(a);
        long t2 = System.currentTimeMillis();

        System.out.println(t1-t0);
        System.out.println(t2-t1);
    }
-----------OUTPUT-----------  
163
1

String类

  • String类对象保存不可修改(immutable)的Unicode字符序列
    • String类的下述方法能创建并返回一个新的String对象实例:concat,replace,replaceAll,substring,toLowerCase,toUpperCase,trim,toString
    • 查找:endsWith,startsWith,indexOf,lastIndexOf
    • 比较:equals,equalsIgnoreCase
    • 字符及长度:charAt,length
  • JDK1.5增加了format函数
public static void main(String[] args) 
    {
        String s = new String( "Hello World" );

        System.out.println( s.length() );
        System.out.println( s.indexOf('o') );
        System.out.println( s.indexOf("He") );
        System.out.println( s.startsWith("He") );
        System.out.println( s.equals("Hello world") );
        System.out.println( s.equalsIgnoreCase("Hello world") );
        System.out.println( s.compareTo("Hello Java") );
        System.out.println( s.charAt(1) );
        System.out.println( s.substring(0,2) );
        System.out.println( s.substring(2) );
        System.out.println( s.concat("!!!") );
        System.out.println( s.trim() );
        System.out.println( s.toUpperCase() );
        System.out.println( s.toLowerCase() );
        System.out.println( s.replace('o', 'x' ) );

        System.out.println( s );  //注意,s本身没有改变
    }
-----------OUTPUT-----------  
11
4
0
true
false
true
13
e
He
llo World
Hello World!!!
Hello World
HELLO WORLD
hello world
Hellx Wxrld
Hello World

字符串常量

  • 除了immutable特点外,还要注意String常量的内不会(interned)问题
  • 即同样的字符串常量是合同的(是指向同一个引用的)
  • 以保证“abc" == "abc”,但是"abc" != new String("abc")

StringBuffer类

  • StringBuffer类对象保存可修改的Unicode字符序列
  • StringBuilder类似,它效率更高,不考虑线程安全性
  • 构造方法
    • StringBuffer()
    • StringBuffer(int capacity)
    • StringBuffer(String initialString)
  • 实现可修改操作的方法append,insert,reverse,setCharAt,setLength

字符串的分割

  • java.util.StringToken类提供了对字符串进行分割的功能
  • 构造
    • StringTokenizer(String str, String delim);
  • 该类的重要方法
    • public int countTokens(); //分割串的个数
    • public boolean hasMoreTokens(); //是否还有分割串
    • publ String nextToken(); //得到下一个分割串
public static void main(String[] args) 
    {
        StringTokenizer st = new StringTokenizer("this is a test", " ");
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
        st = new StringTokenizer("253,197,546", ",");
        double sum = 0;
        while (st.hasMoreTokens()) {
            sum += Double.parseDouble(st.nextToken());
        }
        System.out.println( sum );
    }
-----------OUTPUT-----------  
this
is
a
test
996.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值