java String常用操作以及比較用String與StringBuffer追加字符的執行效率

openkk 12年前發布 | 66K 次閱讀 String Java開發

/
    Come from xixifeng.com
    Author: 習習風/
public class AboutString
{
    public static void main(String[]arsgs)
    {

    String x=new StringBuffer().append("a").append("b").append("c").toString();
    //效果與String x="a"+"b"+"c";一樣
    //但是使用StringBuffer()的效率要高
    /*
    原因如下(特別注明 該原因摘自OExpress(CSDN會員)的解釋并稍作修訂,我覺得他說得更為清楚,非常感謝OExpress):
    java中StringBuffer與String在處理字符串時在效率上有很大的差異,尤其是當字符串很長時!
    字符串對象(String對象)的直是不可改變的,一旦創建了String類對象,就不能在改變其直,引起字符串的屬性和長度改變的操作,將會得到一個復制了原對象中所需部分的新String對象(java實現努力試圖將同一個類中的同樣的字符串和字符的直合并到一個共享的字符串池中)。
StringBuffer類是一個為字符提供的可增大的緩沖區,他向緩沖區附加各種類型的數據,提供了大量的Append()方法的重載。
例如以下例子:
    String   testStr="hello ";
    testStr=testStr+"world ";
    testStr=testStr+"how are you ";
這里用String會反復產生新的String對象,字符數組必須反復復制,著對性能回產生負面影響。若使用StringBuffer類則為更好:
    StringBuffer   testStrBuff=new testStrBuff("hello ");
    testStrBuff.append("world ");
    testStrBuff.append("how   are   you ");
長的字符串,應該是用StringBuffer來操作,建議可以把這個字符串接成幾個字符串來處理,調用append方法類追加,這樣將比使用String類有非常大的效率提升!!
*/
    System.out.println(x);

    String myName="xixifeng.com";
    //輸出索引為0的字符
    System.out.println(myName.charAt(0));

    System.out.println(myName.concat("xyz")); //表示myName+xyz

    System.out.println(myName.endsWith(".com"));//判斷myName是否是以".com"為后綴的結束,是:返回true 反之:false

    //計算出字符床的長度
    System.out.println("myname的長度:"+myName.length());

    //檢測字符串是否為空,是返回true 反之false
    System.out.println("myName.isEmpty:"+myName.isEmpty());

    //myName.indexOf('x') //表示從左到右搜尋myName字符串中的字符x所在的索引(從0開始計數)
    System.out.println(myName.indexOf('f')); //如果沒有,返回-1

    //myName.indexOf('x') //表示從左到右從第2(以0開始計數)個開始搜尋myName字符串中的字符x所在的索引(從0開始計數)
    System.out.println(myName.indexOf('x', 2));//如果沒有,返回-1

    //myName.indexOf("xi") 表示從左到右開始搜索myName字符串中的字符串"xi"所在的索引
    System.out.println(myName.indexOf("xi"));//如果沒有,返回-1

    //myName.indexOf("xi") 表示從左到右從第2個開始搜索myName字符串中的字符串"xi"所在的索引
    System.out.println(myName.indexOf("xi",2));//如果沒有,返回-1

    //左到右,從索引[2開始輸出后面的內容
    System.out.println("substring(2)->"+myName.substring(2));

    //截取的字符串∈[8,10) 輸出索引8(包括8)到10(不含10)區間的字符串
    System.out.println("myName.substring(8, 10)->"+myName.substring(8, 10));

    String myName2="Xixifeng.coM";

    //myName.equals(myName2)表示:忽略大小寫myName的值與myName2的值(注意:equals不是用于比較兩個對象是否相等,而是比較對象的值)是否相等,相等返回true 反之 false
    boolean iseq=myName.equals(myName2);
    System.out.println(iseq);

    //myName.equalsIgnoreCase(myName2)表示:忽略大小寫myName與myName2是否相等,相等返回true 反之 false
    boolean isEquals=myName.equalsIgnoreCase(myName2);
    System.out.println("myName和myName2通過equalsIgnoreCase比較的結果:"+isEquals);

    System.out.println("x在字符串中最后一次出現時所對應的索引是:"+myName.lastIndexOf('x'));
}

}</pre>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!