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

字符串處理

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

StringBuffer是使用緩衝區的,本身也是操作字符串的,但與String類不同,String類中的內容一旦聲明之後不可改變,改變的只是其內存地址的指向,而StringBuffer中的內容是可以改變的,

對於StringBuffer而言,本身是一個具體的操作類,所以不能像String那樣採用直接賦值的方式進行對象實例化,必須通過構造方法完成。

StringBuffer連接字符操作

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

實例操作一:字符串連接操作(append)

代碼:

複製代碼
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()
    }
};
複製代碼

打印結果:

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) ;
    }
};
複製代碼

打印內容

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;
                }
            }
            /**讀取“個、十、百、千”的代碼*/
            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));
    }
}
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章