Java基礎篇--字符串處理(StringBuffer)

字符串處理java

在Java中最常將字符串做爲String類型對象來處理。同時String中也提供了不少操做字符串的函數(可自行查閱資料),而本篇將介紹StringBuffer如何操做字符串。數組

StringBuffer是使用緩衝區的,自己也是操做字符串的,但與String類不一樣,String類中的內容一旦聲明以後不可改變,改變的只是其內存地址的指向,而StringBuffer中的內容是能夠改變的,app

對於StringBuffer而言,自己是一個具體的操做類,因此不能像String那樣採用直接賦值的方式進行對象實例化,必須經過構造方法完成。函數

StringBuffer鏈接字符操做this

  • 當一個字符串的內容須要被常常改變時就要使用StringBuffer
  • 在StringBuffer中使用append()方法,完成字符串的鏈接操做

實例操做一:字符串鏈接操做(append)spa

代碼:code

package 字符串處理;
public class StringBufferDemo01{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("Hello ") ;                    // 向StringBuffer中添加內容
        buf.append("World").append("!!!") ;        // 能夠連續調用append()方法
        buf.append("\n") ;                        // 添加一個轉義字符
        buf.append("數字 = ").append(1).append("\n") ;    // 添加數字
        buf.append("字符 = ").append('C').append("\n");     // 添加字符
        buf.append("布爾 = ").append(true) ;    // 添加布爾值
        System.out.println(buf) ;            // 直接輸出對象,調用toString()
    }
};

打印結果:orm

Hello World!!!
數字 = 1
字符 = C
布爾 = true

實例操做二:字符串添加內容(insert)對象

public class StringBufferDemo03{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("World!!") ;        // 添加內容
        buf.insert(0,"Hello ") ;        // 在第一個內容以前添加內容
        System.out.println(buf) ;
        buf.insert(buf.length(),"偶my耶~") ;    // 在最後添加內容
        System.out.println(buf) ;
    }
};

打印內容blog

Hello World!!
Hello World!!偶my耶~

實例操做三:字符串反轉(reverse)

package 字符串處理;
public class StringBufferDemo04{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("World!!") ;        // 添加內容
        buf.insert(0,"Hello ") ;        // 在第一個內容以前添加內容
        String str = buf.reverse().toString() ;    // 將內容反轉後變爲String類型
        System.out.println(str) ;        // 將內容輸出
    }
};

打印內容:

!!dlroW olleH

實例操做四:替換字符串指定內容(replace)

public class StringBufferDemo05{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("Hello ").append("World!!") ;        // 向StringBuffer添加內容
        buf.replace(6,11,"偶my耶") ;        // 將world的內容替換
        System.out.println("內容替換以後的結果:" + buf) ;    // 輸出內容
    }
};

打印內容:

內容替換以後的結果:Hello 偶my耶!!

實例操做五:字符串截取(substring,delete)

package 字符串處理;
public class StringBufferDemo06{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("Hello ").append("World!!") ;        // 向StringBuffer添加內容
        buf.replace(6,11,"偶my耶") ;        // 將world的內容替換
        String str = buf.substring(6,11) ;    // 截取指定範圍的內容
     // String str = buf.delete(6,11).toString() ;// 刪除指定範圍中的內容
        System.out.println(buf);
        System.out.println("內容替換以後的結果:" + str) ;    // 輸出內容
    }
};        

打印結果

Hello 偶my耶!!
內容替換以後的結果:偶my耶!

實例操做六:查找指定內容(indexOf)

package 字符串處理;
public class StringBufferDemo08{
    public static void main(String args[]){
        StringBuffer buf = new StringBuffer() ;    // 聲明StringBuffer對象 
        buf.append("Hello ").append("World!!") ;        // 向StringBuffer添加內容
        if(buf.indexOf("Hello")==-1){
            System.out.println("沒有查找到指定的內容") ;
        }else{    // 不爲01表示查找到內容
            System.out.println("能夠查找到指定的內容") ;
        }
    }
};

打印內容

能夠查找到指定的內容

在StringBuffer中還有許多的函數就不一一介紹了!想要更深去了解可查閱相關資料,

下面介紹一個使用String和StringBuffer來操做字符串的案列

案列之小寫金額變大寫金額

package com.lh.bean;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class StringUtil {
    private String money;        //轉換以前的數字金額
    private String submoneyCN[]={"","拾","佰","仟"};                                    //表示數字位數的數組
    private String numberCNN[]={"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};    //大寫數字的數組
    private String je="零壹貳叄肆伍陸柒捌玖";        //大寫的數字(0-9)
    private String cdw="萬仟佰拾億仟佰拾萬仟佰拾元角分";    //金額單位
    public StringUtil(){}        //默認的構造方法
    public void setMoney(String money){
        this.money=money;
    }
    public String getMoney(){
        return convert(this.money);
        
    }
    /**
     * 轉換數字金額爲大寫金額
     * @return 返回轉換後的大寫金額
     */
    public String convert(String money){
      String formatCN="";    
      int point=money.indexOf(".");                //判斷字符串是否包含小數點
      if(point!=-1){
        String money1=money.substring(0,point);    //小數點以前的部分
        String money1_1=(new StringBuffer(money1).reverse()).toString();//字符串倒序
        String money2=money.substring(point+1);    //小數點以後的部分
        if(money2.length()<2){                    //若是小數點後的部分少於兩位,用"0"補齊
            if(money2.length()==0)
                money2="00";
            else
                money2+="0";
        }
        else                                    //若是小數點後的位數大於2位,則只前2位
            money2=money.substring(point+1,point+3);
        int len = money1_1.length();            //字符串反轉以後,小數點以前的字符位數
        int pos=len-1;
        String sigle="";
        boolean allhavenum=false;
        boolean havenum=false;
        boolean mark=false;                       //設置一個開關變量,若當前數爲"0",將該值設爲true;不爲"0"時設爲false
        /**如下代碼爲讀出小數點左面的部分*/
        while(pos>=0){
            sigle=money1_1.substring(pos,pos+1);//截取1位數字,好比數字1234.56,將左側的字符串反轉,值爲4321,則截取的值爲1
           
            /**讀取「億單元」的代碼。
             * 假設讀取10024531042.34。
             * 小數點左面反轉後爲:24013542001
             * pos的初始值爲10
             * mark的初始值爲false
             * havenum的初始值爲false
             * */        
            if(pos>=8&&pos<12){ 
                if(!sigle.equals("0")){           //若是當前值不爲"0"
                    if(!mark){                    //若是當前值的前一位數不爲"0"
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                    }
                    else{                         //若是當前值不爲"0",但該值的前一位數爲"0"
                        if(allhavenum){             //若是在當前值以前有不爲"0"的數字出現。該條件用來處理用戶輸入的如:0012.34的數值
                            formatCN+="零";
                        }
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                        mark=false;
                    }
                    havenum=true;
                    allhavenum=true;            //變量allhavenum表示小數點左面的數中是否有不爲"0"的數字;true表示有,false表示無
                }
                else{                              //若是當前值爲"0"
                    mark=true;
                }
                if(pos%4==0&&havenum){             //若是當前數字爲該單元的最後一位,而且該單元中有不爲"0"的數字出現
                    formatCN+="億";
                    havenum=false;
                }
            }
            /**讀取「萬單元」的代碼*/                 
            if(pos>=4&&pos<8){
                if(!sigle.equals("0")){
                    if(!mark)
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                    else{
                        if(allhavenum){
                            formatCN+="零";
                        }
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                        mark=false;
                    }
                    havenum=true;
                    allhavenum=true;
                }
                else{
                    mark=true;
                }
                if(pos%4==0&&havenum){ 
                    formatCN+="萬";
                    havenum=false;
                }
            }
            /**讀取「個、10、百、千」的代碼*/
            if(pos>=0&&pos<4){
                if(!sigle.equals("0")){        
                    if(!mark)
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                    else{ 
                        if(allhavenum){
                            formatCN+="零";
                        }
                        formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4];
                        mark=false;       
                    }
                    havenum=true;
                    allhavenum=true;
                }
                else{
                    mark=true;
                }
            }
            pos--;            
        }
        /**碰到小數點時的讀法*/        
        if(allhavenum)        //如:00.34就不能讀爲:元3角4分.變量allhavenum表示小數點左面的內容中是否有數字出現
            formatCN+="元";
        else                 //若是小數點左面的部分都爲0如:00.34應讀爲:零元3角4分
            formatCN="零元";
        /**如下代碼爲讀出小數點右面的部分 */       
        if(money2.equals("00"))
            formatCN+="整";
        else{
            /**讀出角,如120.34讀爲:1佰2拾元零3角4分;123.04讀爲:1佰2拾3元零4分*/
            if(money2.startsWith("0")||(allhavenum&&money1.endsWith("0"))){ 
                formatCN+="零";
            }
            if(!money2.startsWith("0")){
                formatCN+=numberCNN[Integer.parseInt(money2.substring(0,1))]+"角";
            }
            //讀出分,如:12.30讀1拾2元3角零分
            formatCN+=numberCNN[Integer.parseInt(money2.substring(1))]+"分";
        }
      } 
      else{
          formatCN="輸入的格式不正確!格式:888.00";
      }
      return formatCN;
    }
    public static void main(String[] args) throws IOException {
        System.out.println("輸入要轉換的金錢:");
        BufferedReader  br=new BufferedReader(new InputStreamReader(System.in));
        String money = br.readLine();
      StringUtil SU=  new StringUtil();
        System.out.println(SU.convert(money));
    }
}

相關文章
相關標籤/搜索