- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)
- 軟件開發技術聯盟
- 6字
- 2021-03-26 13:01:23
第5章 JavaBean技術
5.1 字符串處理
在開發Web應用程序時,由于大部分數據都是以字符串形式表示的,所以避免不了要對這些字符串數據進行處理。例如,有時需要將小寫金額轉換為大寫;將一個長的字符串進行截取;過濾字符串中的空格等,這些操作在程序中會經常用到。本節將介紹一些常用的字符串處理的JavaBean。
實例125 小寫金額轉換成大寫金額
光盤位置:光盤\MR\05\125
高級
實用指數:
實例說明
運行本實例后,在頁面中輸入數字格式的金額,然后單擊“轉換”按鈕后會顯示金額的大寫漢字形式,運行結果如圖5.1所示。

圖5.1 小寫金額轉換為大寫
關鍵技術
實現本實例,首先需要在JavaBean類中定義一個表示大寫數字的數組和一個表示數字位數的數組,代碼如下:
String numberCNN[]={"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"}; String submoneyCN[]={"", "拾", "佰", "仟"};
然后在自定義的JavaBean方法中循環處理數字字符串的每一位數字,經過判斷將每位數字都轉換為大寫漢字,最后組合成一個完整的以大寫漢字表示的金額字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,關鍵代碼如下:
public class StringUtil { private String money; //轉換之前的數字金額 private String submoneyCN[]={"", "拾", "佰", "仟"}; //表示數字位數的數組 private String numberCNN[]={"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"}; //大寫數字的數組 public StringUtil(){} //默認的構造方法 … //此處省略了formatCN以及money屬性的getXXX()和setXXX()方法 /** * 轉換數字金額為大寫金額 *@return 返回轉換后的大寫金額 */ public String convert(){ 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 //如果小數點后的位數大于兩位,則只取前兩位 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,否則設為false /**以下代碼為讀出小數點左面的部分*/ while(pos>=0){ //截取1位數字,如數字1234.56,將左側的字符串反轉,值為4321,則截取的值為1 sigle=money1_1.substring(pos, pos+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 //如果在當前值之前有不為0的數字出現 //該條件用來處理用戶輸入的如0012.34的數值 if(allhavenum)formatCN+="零"; formatCN+=numberCNN[Integer.parseInt(sigle)]+submoneyCN[pos%4]; mark=false; } havenum=true; //allhavenum表示小數點左面的數中是否有不為0的數字 allhavenum=true; } else{ //如果當前值為0 mark=true; } //如果當前數字為該單元最后一位,并且該單元中有不為0的數字出現 if(pos%4==0&&havenum){ formatCN+="億"; havenum=false; } } … //此處省略了其他單元的轉換,其轉換過程與以上代碼“億單元”的轉換過程類似 pos--; } /**碰到小數點時的讀法*/ if(allhavenum) //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; } }
(2)新建index.jsp頁面,用于輸入數字金額,關鍵代碼如下:
<form action="convert.jsp"method="post"> <table> <tr> <td align="center"bgcolor="skyblue"> 請輸入金額</td> </tr> <tr height="25"> <td bgcolor="yellow"> 金額:<input type="text"name="money"id="money"/> <input type="submit"value="轉換"> </td> </tr> </table> </form>
(3)新建convert.jsp的處理頁,用于獲得表單的請求信息,并調用Bean類的方法轉換金額,關鍵代碼如下:
<% String money=request.getParameter("money"); %> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <jsp:setProperty property="money"name="strBean"value="<%=money %>"/> <table> <tr><td align="center"bgcolor="skyblue"> 轉換結果:</td></tr> <tr height="25"> <td bgcolor="yellow"><jsp:getProperty property="money"name="strBean"/></td> </tr> </table>
秘笈心法
本實例的實現關鍵是如何找到其中的算法規律。例如,讀取123456789.34這樣一個數字,可以將數據以小數點為界限分為兩個部分,小數點左側的數字從個位起每4位組成一個單元,然后像讀取個、十、百、千的方法讀取各個單元,并加上該單元的單位;小數點右側的數字可以直接讀取。
實例126 轉換輸入文本中的回車和空格
光盤位置:光盤\MR\05\126
初級
實用指數:
實例說明
本實例將用戶輸入的回車和空格轉換成能夠在JSP頁中輸出的回車和空格。運行本實例,在輸入框中輸入一段包含空格和回車的內容,提交表單后,在顯示信息頁中的內容會包含空格和回車,運行結果如圖5.2所示。

圖5.2 轉換輸入文本中的回車和空格
關鍵技術
本實例主要應用String類中的replaceAll()方法,將用戶輸入的空格和回車替換為HTML代碼中的<br>和 ,該方法用于將字符串中的某個子字符串替換為指定的字符串,其語法格式如下:
replaceAll(String regex, String replacement)
參數說明
? regex:字符串中原來的子字符串。
? replacement:替換后的子字符串。
設計過程
(1)新建StringUtil的JavaBean類,該類主要包含一個轉換空格和換行符的方法,關鍵代碼如下:
public class StringUtil { private String str; //要替換的字符串 public void setStr(String str){ this.str = str; } public String getStr(){ return replace(str); } /** * 替換字符串的方法 * @param str:源字符串 *@return 替換后的字符串 */ public String replace(String str){ String newStr1=""; String newStr2=""; newStr1=str.replaceAll("", " "); //替換字符串中的空格為  newStr2=newStr1.replaceAll("\r\n", "<br>"); //替換換行符為<br> return newStr2; //返回替換后的字符串 } }
(2)新建index.jsp頁面,用于在表單中輸入包含空格和換行的測試內容,關鍵代碼如下:
<form action="replace.jsp"method="post"> <table> <tr><td align="center">請輸入信息</td> </tr> <tr> <td><textarea rows="5"cols="30"name="info"></textarea></td> </tr> <tr> <td align="center"><input type="submit"value="提交"/></td> </tr> </table> </form>
(3)新建replace.jsp頁面,該頁面用于獲得表單信息,并調用Bean類的方法實現字符串中的空格和換行的轉換,關鍵代碼如下:
<body> <% String info = request.getParameter("info"); %> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <jsp:setProperty property="str"name="strBean"value="<%=info %>"/> <table width="240"> <tr> <td align="center">查看信息結果</td> </tr> <tr> <td height="100"valign="top"> <jsp:getProperty property="str"name="strBean"/> </td> </tr> </table> </body>
秘笈心法
轉換空格和回車經常應用在論壇網站的用戶留言板中。例如,在留言板中,用戶輸入留言內容時,可能會故意輸入回車和空格,因此在顯示用戶的留言內容時,應該包含用戶輸入的回車和空格。
實例127 計算字符串的實際長度
光盤位置:光盤\MR\05\127
初級
實用指數:
實例說明
在程序開發過程中,字符串類型的數據使用得非常頻繁,經常需要獲得字符串的實際長度,然后可以根據該字符串的長度值來操作字符串,本實例的運行結果如圖5.3所示。

圖5.3 計算字符串的實際長度
關鍵技術
本實例主要應用String類的getLength方法、toCharArray方法和getBytes方法。如果字符串中不包含中文字符,那么使用getLength方法就可以獲得字符串的長度。使用getLength方法時,字符串的每一位字符的長度都被認為是1,由于中文字符占兩位長度,所以使用getLength計算出的包含中文字符串的長度是不對的。
計算包含中文字符串的長度時,可以配合使用toCharArray方法和getBytes方法。首先使用toCharArray方法將一個字符串轉換為字符數組,然后循環這個字符數組,將每個字符通過getBytes方法轉換為字節數組并獲取字節數組長度,最后累計每個字符的長度,從而獲得整個字符串的實際長度。
設計過程
(1)新建名為StringUtil的JavaBean類,該類中提供的方法用于獲得字符串的實際長度,關鍵代碼如下:
public class StringUtil { private String str; //需要計算長度的字符串 private int strLength; //字符串的實際長度 public String getStr() { return str; } public void setStr(String str) { this.str = str; } public int getStrLength() { char[]c=str.toCharArray(); //將字符串轉換為字符數組 int factualLength=0; //用于保存每個字符的實際長度 for(int i=0; i<c.length; i++){ factualLength=String.valueOf(c[i]).getBytes().length; //獲得字節數組的長度 if(factualLength==3){ //當程序編碼為UTF-8時,漢字實際的字節長度為3 factualLength=2; //此處將字節長度改為2 } strLength+=factualLength; //將每個字符的長度累加,結果就是字符串的總長度 } return strLength; } public void setStrLength(int strLength) { this.strLength = strLength; } }
(2)新建index.jsp網頁,該頁中包含一個提交字符串信息的表單,關鍵代碼如下:
<form action="getlength.jsp"method="post"> <table> <tr height="35"> <td align="center">請輸入字符串:</td> <td> <input type="text"name="str"/> </td> <td align="center"> <input type="submit"value="提交"/> </td> </tr> </table> </form>
(3)新建getlength.jsp頁,在該頁中首先獲得表單中的字符串,然后調用StringUtil類的方法計算字符串的長度,關鍵代碼如下:
<body> <% String str = request.getParameter("str"); %> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <jsp:setProperty property="str"name="strBean"value="<%=str %>"/> <table> <tr><td>字符串:</td> <td align="left"><jsp:getProperty property="str"name="strBean"/></td> </tr> <tr><td>實際長度:</td> <td><jsp:getProperty property="strLength"name="strBean"/></td> </tr> </table> </body>
秘笈心法
由于在數據庫中保存的字符串類型的值是按實際的字符串長度保存的,英文占一個長度,而漢字字符占兩個長度。如果保存到數據庫的字符串長度超出數據庫中定義的實際長度,將會拋出異常導致程序終止。因此在將數據保存到數據庫之前,判斷字符串的實際長度是很有必要的。
實例128 字符串截取
光盤位置:光盤\MR\05\128
初級
實用指數:
實例說明
在實際程序開發中,經常會對字符串進行截取,如在論壇網站的帖子列表中,當某個帖子的標題過長時,需要截取該帖子標題的部分內容顯示在列表中,然后其余內容以省略號代替。運行本實例,效果如圖5.4所示。

圖5.4 字符串截取
關鍵技術
本實例主要使用String類中的substring()方法實現字符串截取,其語法格式如下:
substring(int beginIndex, int endIndex)
參數說明
? beginIndex:指定截取字符串的起始位置。
? endIndex:指定截取字符串的結束位置。該參數為可選參數,如果不指定此參數,則截取時是從起始位置beginIndex截取到字符串的末尾。
設計過程
(1)新建名為StringUtil的JavaBean類,在該類中實現字符串的截取操作,關鍵代碼如下:
public class StringUtil { private String str; //需要截取的源字符串 public String getStr() { if(str.length()>50){ //如果字符串的長度大于50,則從0開始截取到50,之后的以省略號代替 return str.substring(0,50)+"..."; } return str; } public void setStr(String str) { this.str = str; } }
(2)新建index.jsp頁,該頁包含一個輸入留言內容的表單,關鍵代碼如下:
<form action="substr.jsp"method="post"> <table> <tr> <td align="center">請輸入留言內容:</td></tr> <tr> <td><textarea rows="5"cols="30"name="str"></textarea></td> </tr> <tr> <td align="center"><input type="submit"value="提交"/></td> </tr> </table> </form>
(3)新建substr.jsp頁,用于處理表單提交過來的留言信息,關鍵代碼如下:
<% String str = request.getParameter("str"); %> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <jsp:setProperty property="str"name="strBean"value="<%=str %>"/> <table width="200"> <tr> <td width="60"valign="top">留言內容:</td> <td align="left"><jsp:getProperty property="str"name="strBean"/></td> </tr> </table>
秘笈心法
在StringBuffer類中同樣包含substring()方法,該方法也可以實現字符串截取。StringBuffer用于表示可以修改的字符串,StringBuffer是與String同等的類,它表示可增加和可編寫的字符序列。
實例129 字符串轉換成數組
光盤位置:光盤\MR\05\129
初級
實用指數:
實例說明
將字符串轉換為數組也是在開發中常用的技術,如用戶在某個表單頁中選中了多個復選框,在處理這些選中的內容時,需要獲得復選框的所有選中內容,此時需要使用JavaScript方法將所有選中的內容累加,然后將這個累加后的字符串提交,在服務器端獲得該字符串時,就需要將這個包含多個復選框內容的長字符串分解為數組,然后再進一步處理。運行本實例,在“您喜歡的運動有:”中,選中多個復選框內容,然后提交表單,最后在服務器處理頁中將復選框的內容轉換為數組并顯示,運行結果如圖5.5所示。

圖5.5 字符串轉換為數組
關鍵技術
本實例主要通過String類的split()方法來實現將字符串轉換為數組。split()方法包含一個String類型的參數regex,調用時會以regex為字符串的分隔符,將字符串分隔為字符串數組,代碼如下:
String str = "a, b, c, d"; String strArr[] = str.split(", ");
設計過程
(1)新建StringUtil的JavaBean類,在該類中實現將字符串轉換為數組,關鍵代碼如下:
public class StringUtil { private String str; //要分隔的字符串 private String strArr[]; //分隔后的字符串數組 private String listSeparator; //分隔符號 public StringUtil(){} //默認構造方法 public String getStr() { return str; } public void setStr(String str) { this.str = str; } /**返回分隔符*/ public String getListSeparator() { return listSeparator; } /**設置分隔符*/ public void setListSeparator(String listSeparator) { this.listSeparator = listSeparator; } /**返回字符串數組*/ public String[] getStrArr() { return str.split(listSeparator); //根據分隔符號分隔字符串為數組 } }
(2)新建index.jsp頁,在該頁中主要包含一個隱藏域和多個復選框的表單,關鍵代碼如下:
<form action="toarray.jsp"method="post"> <input type="hidden"name="likes"id="likes"/> <table width="220"> <tr bgcolor="skyblue"><td align="center">您喜歡的運動有: </td></tr> <tr> <td> <input type="checkbox"name="like"value="打籃球">打籃球 <input type="checkbox"name="like"value="踢足球">踢足球 <input type="checkbox"name="like"value="打乒乓球">打乒乓球 <input type="checkbox"name="like"value="跑步">跑步 <input type="checkbox"name="like"value="打羽毛球">打羽毛球 <input type="checkbox"name="like"value="游泳">游泳 </td> </tr> <tr bgcolor="skyblue"> <td align="center"> <input type="submit"value="提交"onclick="getSelectCheckbox()"/> </td> </tr> </table> </form>
(3)編寫“提交”按鈕的onClick事件所調用的JavaScript方法,該方法用于獲得所有選中復選框的內容,并將該值賦給隱藏域,關鍵代碼如下:
<script type="text/javascript"> function getSelectCheckbox(){ var checkObj=document.getElementsByName("like"); //獲得復選框對象,該對象是個數組 var likeStr =""; for(var i=0; i < checkObj.length ; i++){ if(checkObj[i].checked==true){ //如果某個復選框為選中狀態 likeStr+=checkObj[i].value+", "; //將選中的復選框值組合,并以“, ”分隔 } } //將組合后復選框的內容賦給隱藏域,表單提交后,獲得的是該隱藏域的內容 document.getElementById("likes").value=likeStr; } </script>
(4)新建toarray.jsp頁,該頁用于處理表單請求,并調用JavaBean方法將字符串轉換為數組,然后將數組中的元素顯示在表格中,關鍵代碼如下:
<% String likes=request.getParameter("likes"); //從請求中獲取以“,”分隔的字符串 %> <!-- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <!-- 對StringUtil類的對象strBean的str屬性賦值 --> <jsp:setProperty property="str"name="strBean"value="<%=likes %>"/> <! -- 對StringUtil類的對象strBean的listSeparator(分隔符)屬性賦值 --> <jsp:setProperty property="listSeparator"name="strBean"value=", "/> <% String likeArr[]=strBean.getStrArr(); //分隔后的字符串數組 %> <table> <tr> <td width="100"valign="top">您選擇的運動有:</td> <% for(int i = 0; i<likeArr.length; i++){ %> <td align="left">【<%=likeArr[i]%>】</td> <%} %> </tr> </table>
秘笈心法
將字符串轉換成數組的操作在實際的程序開發中經常用到,所以讀者應該掌握。
實例130 數組轉換為字符串
光盤位置:光盤\MR\05\130
初級
實用指數:
實例說明
在實際的開發過程中,經常需要將數組轉換為字符串。本實例將介紹如何將數組元素轉換為字符串并顯示,運行結果如圖5.6所示。

圖5.6 將月份數組轉換為字符串顯示
關鍵技術
將數組元素轉換為字符串非常簡單,主要通過循環數組,然后在循環中依次將每個元素取出來,再把所有元素拼接成一個字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,該類主要用于將數組轉換為字符串,關鍵代碼如下:
public class StringUtil { private int intArr[]; //整型數組 private String str=""; //將數組轉換后的字符串 public StringUtil(){} //默認構造方法 /**返回字符串*/ public String getStr() { for(int i=0; i<intArr.length; i++){ //循環整型數組 str+=String.valueOf(intArr[i]); //將每個數組元素轉換為字符串并拼成字符串 if(i<intArr.length-1){ str+=", "; //每個字符串以“, ”隔開 } } return str; } /**給字符串賦值*/ public void setStr(String str){ this.str = str; } /**返回數組*/ public int[]getIntArr(){ return intArr; } /**給數組賦值*/ public void setIntArr(int[]intArr){ this.intArr = intArr; } }
(2)新建index.jsp網頁,在該頁中定義一個整型的表示月份的數組,然后調用StringUtil類中的方法將數組轉換為字符串并顯示在表格中,關鍵代碼如下:
<% int month[]=new int[12]; //創建一個月份的數組 for(int i=0; i<month.length; i++){ //通過循環給月份數組的元素賦值 month[i] = i+1; } %> <! -- 使用useBean動作導入StringUtil類 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類對象中的intArr數組屬性賦值 --> <jsp:setProperty property="intArr"name="strBean"value="<%=month %>"/> <table width="220"> <tr bgcolor="skyblue"> <td align="center">一年中的月份:</td></tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的str屬性值,該值為數組轉換后的字符串 --> <jsp:getProperty property="str"name="strBean"/> </td> </tr> </table>
秘笈心法
將數組元素轉換為字符串的操作在實際的程序開發中經常用到,所以讀者應該掌握轉換的方法。
實例131 將整型值轉換為字符串
光盤位置:光盤\MR\05\131
初級
實用指數:
實例說明
在實際的開發過程中,經常需要將整型值轉換為字符串。本實例將通過幾種方法來介紹如何將整型值轉換為字符串型,運行結果如圖5.7所示。

圖5.7 將整型年齡轉換為字符串
關鍵技術
將整型值轉換為字符串,可以使用以下3種簡便的方法。
(1)String.valueOf()
String類的valueOf()方法實現了將多種類型的值轉換為字符串。在String類中該方法實現了重載,可以轉換的類型包括boolean類型的值、char類型的值、char[]類型的值、double類型的值、float類型的值、int類型的值、long類型的值以及Object類型的值。
(2)Integer.toString()
Integer類的toString()方法中包含一個int類型的參數,當使用該方法時,可以直接調用該方法并傳入一個int類型的參數,即可將int值轉換為字符串。
(3)Integer.valueOf().toString()
使用Integer類的valueOf().toString()方法時,首先將int值轉換為Integer對象,然后再調用toString()方法即可轉換為字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,在該類中實現了將int值轉換為字符串的3種方法,關鍵代碼如下:
public class StringUtil { private int intValue=0; //轉換前的int值 private String strValue1; //轉換后的字符串1值 private String strValue2; //轉換后的字符串2值 private String strValue3; //轉換后的字符串3值 public StringUtil(){} //默認構造方法 public String getStrValue1() { return String.valueOf(intValue); //使用String類的valueOf()方法轉換 } public String getStrValue2() { return Integer.toString(intValue); //使用Integer類的toString()方法轉換 } public String getStrValue3() { return Integer.valueOf(intValue).toString();//使用Integer.valueOf().toString()方法 } ……//此處省略了其他屬性的set方法和get方法 }
(2)新建index.jsp頁,在該頁中分別調用StringUtil類的這3種方法返回字符串值,并顯示在頁面中,關鍵代碼如下:
<% int userAge = 35; %> <! -- 使用useBean動作導入StringUtil類 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類對象中的intValue屬性賦值 --> <jsp:setProperty property="intValue"name="strBean"value="<%=userAge %>"/> <table> <tr bgcolor="skyblue"> <td align="center">使用String.valueOf()方法轉換int值:</td> </tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的strValue1屬性值 --> 年齡1:<jsp:getProperty property="strValue1"name="strBean"/>歲 </td> </tr> <tr bgcolor="skyblue"> <td align="center">使用Integer.toString()方法轉換int值:</td> </tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的strValue2屬性值 --> 年齡2:<jsp:getProperty property="strValue2"name="strBean"/>歲 </td> </tr> <tr bgcolor="skyblue"> <td align="center">使用Integer.valueOf().toString()方法轉換int值:</td> </tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的strValue3屬性值 --> 年齡3:<jsp:getProperty property="strValue3"name="strBean"/>歲 </td> </tr> </table>
秘笈心法
在實際開發過程中,經常需要將整型值轉換為字符串類型,因此讀者應該至少掌握本實例中講解的3種轉換方法中的一種。
實例132 將字符串型轉換為整型
光盤位置:光盤\MR\05\132
初級
實用指數:
實例說明
在實際的開發過程中,有時需要將字符串值轉換為整型,如用戶填寫注冊表單時輸入的年齡或者商品信息表單中的商品數量。本實例將介紹如何把一個字符串值轉換為整型,運行結果如圖5.8所示。

圖5.8 字符串值轉換為整型值
關鍵技術
將字符串轉換為整型值,主要使用的是Integer類的parseInt()方法和valueOf()方法。它們都可以接收一個String類型的參數。parseInt()方法返回一個int類型的值,valueOf()方法則返回的是Integer對象,該對象可以直接作為int值輸出,也可以通過intValue()方法轉換為int類型。當參數不符合轉換條件時,如將字符串a轉換為int類型時,會拋出一個java.lang. NumberFormatException類型的異常。
設計過程
(1)新建名為StringUtil的JavaBean類,該類主要實現了將字符串轉換為整型的兩種方法,關鍵代碼如下:
public class StringUtil { private int intValue1; //第一種方法轉換后的int值 private int intValue2; //第二種方法轉換后的int值 private String strValue; //被轉換的字符串 public StringUtil(){} //默認構造方法 public int getIntValue1() { return Integer.parseInt(strValue); //使用Integer類的parseInt()方法轉換 public int getIntValue2() { return Integer.valueOf(strValue); //使用Integer類的valueOf()方法轉換 public String getStrValue() { return strValue; } public void setStrValue(String strValue) { this.strValue = strValue; } }}}
(2)新建index.jsp頁,在該頁中調用StringUtil的兩種轉換方法,將字符串轉換為整型值,關鍵代碼如下:
<% String strAge = "26"; %> <! -- 使用useBean動作導入StringUtil類 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類對象中的strValue屬性賦值 --> <jsp:setProperty property="strValue"name="strBean"value="<%=strAge %>"/> <table> <tr bgcolor="skyblue"> <td align="center">使用Integer.parseInt()方法轉換字符串:</td> </tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的intValue1屬性值 --> 年齡1:<jsp:getProperty property="intValue1"name="strBean"/>歲 </td> </tr> <tr bgcolor="skyblue"> <td align="center">使用Integer.valueOf()方法轉換字符串:</td> </tr> <tr> <td align="center"> <! -- 獲得StringUtil類對象中的intValue2屬性值 --> 年齡2:<jsp:getProperty property="intValue2"name="strBean"/>歲 </td> </tr> </table>
秘笈心法
在實際開發過程中,經常需要將字符串轉換為整型。如用戶注冊表單中的年齡,通過表單提交默認為字符串類型,因此在服務器端獲取到年齡信息時,就需要將其轉換為整型。
實例133 把整型數據格式化為指定長度的字符串
光盤位置:光盤\MR\05\133
初級
實用指數:
實例說明
本實例介紹如何將整型數據格式化為指定長度的字符串,如果位數不夠,以0補齊,實例運行結果如圖5.9所示。

圖5.9 將整型值轉換為指定長度的字符串
關鍵技術
實現數字格式化,主要應用的是java.text.NumberFormat類,它提供了一些用于將Number對象和數字格式化為本地字符串或者通過語義分析把本地化的字符串轉換為Number對象的方法。本實例用到的幾個方法介紹如下。
(1)NumberFormat類的getInstance()方法
功能:該方法用于返回當前默認語言環境的通用數值格式。
(2)NumberFormat類的setMinimumIntegerDigits()方法
功能:該方法用于設置數的整數部分所允許的最小位數,如果位數不夠,則在數字前用0補齊。
(3)NumberFormat類的format()方法
功能:該方法用于將數字格式化為字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,該類主要實現了將數字格式化的方法,關鍵代碼如下:
public class StringUtil{ private int intValue; //將要格式化的整型值 private String formatStr; //格式化后的字符串 private int minimumDigit; //格式化后字符串的最少位數 public StringUtil(){} //默認的構造方法 public int getMinimumDigit(){ return minimumDigit; } public void setMinimumDigit(int minimumDigit){ this.minimumDigit=minimumDigit; } public int getIntValue(){ return intValue; } public void setIntValue(int intValue){ this.intValue=intValue; } public String getFormatStr(){ NumberFormat nf=NumberFormat.getInstance(); //獲取常規數值格式對象 nf.setMinimumIntegerDigits(minimumDigit); //設置格式化數字的整數部分最少位數 return nf.format(intValue).replace(", ", ""); //返回格式化的字符串并把字符串中的“, ”替換掉 } public void setFormatStr(String formatStr){ this.formatStr=formatStr; } }
(2)新建index.jsp頁,該頁主要包含一個表單,關鍵代碼如下:
<form action="format.jsp"method="post"> <table> <tr> <td align="right">請輸入要格式化的數字:</td> <td><input type="text"name="num"/></td> </tr> <tr> <td align="right">請輸入格式化后的字符串長度:</td> <td><input type="text"name="length"/></td> </tr> <tr> <td colspan="2"align="center"><input type="submit"value="格式化"/></td> </tr> </table> </form>
(3)新建format.jsp的處理頁,用于獲得表單請求信息,并調用StringUtil類的方法格式化數字,關鍵代碼如下:
<% String num=request.getParameter("num"); //獲取表單中字符串格式的數字 String length=request.getParameter("length"); //獲取字符串格式的長度 int n=Integer.parseInt(num); //轉換為int類型 int l = Integer.parseInt(length); %> <! -- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類的intValue屬性賦值 --> <jsp:setProperty property="intValue"name="strBean"value="<%=n %>"/> <! -- 對StringUtil類的minimumDigit屬性賦值 --> <jsp:setProperty property="minimumDigit"name="strBean"value="<%=l %>"/> <table> <tr> <td>格式化之前的數字:</td> <td align="left"> <! —獲得StringUtil類的intValue屬性值 --> <jsp:getProperty property="intValue"name="strBean"/> </td> </tr> <tr> <td>格式化之后的字符串:</td> td align="left"> <! —獲得StringUtil類的formatStr屬性值 --> <jsp:getProperty property="formatStr"name="strBean"/> </td> </tr> </table>
秘笈心法
實現本實例可以不用NumberFormat類,通過+連接符就可以實現,這一部分代碼比較簡單,此處不再詳細介紹。
實例134 將長整型的數字分位顯示
光盤位置:光盤\MR\05\134
初級
實用指數:
實例說明
在實際的開發過程中,有時會遇到顯示長整型數字的問題,為了方便用戶查看,需要將數字分位顯示。本實例將介紹如何將一個長整型的數字分位顯示,運行效果如圖5.10所示。

圖5.10 分位顯示長數字
關鍵技術
長整型的數字可以用long類型表示,在Java中的long類型最大值為19位的數字922,3372,0368,5477,5807,定義時應該在數字末尾加上L,否則會被默認為int類型,代碼如下:
long value = 1234567890123456789l;
可以應用StringBuffer類的insert()方法和reverse()方法將一個long類型的數字分位。使用insert()方法可以動態地向一個StringBuffer對象類型的字符串中的指定位置插入指定的字符串,由于分位是從數字的個位開始,所以需要使用reverse()方法將字符串反轉。insert()方法的語法格式如下:
public StringBuffer insert(int offset, String str)
參數說明
? offset:表示偏移量,該參數值必須大于等于0,且小于等于此序列的長度。
? str:表示要插入的字符串。
設計過程
(1)新建StringUtil的JavaBean類,在該類中實現了將long類型的數字轉換為分位字符串,關鍵代碼如下:
public class StringUtil { private long longValue; //要分位的數字 private int digit; //分位位數 private String formatStr; //分位后的字符串 public StringUtil(){} //默認的構造方法 public long getLongValue() { return longValue; } public void setLongValue(long longValue) { this.longValue = longValue; } public int getDigit(){ return digit; } public void setDigit(int digit){ this.digit=digit; } public String getFormatStr(){ StringBuffer sb=new StringBuffer(String.valueOf(longValue)); //將long類型的值轉換為可動態修改的StringBuffer對象 sb=sb.reverse(); //將字符串反轉 int l=sb.length(); if(digit==0){ //如果分位位數為0,設置字符串的長度為分位位數 digit=l; } int count=0; /**計算出插入的分位符個數*/ if(l%digit==0) count=l/digit-1; else count=l/digit; for(int i=0; i<count; i++){ sb=sb.insert((i+1)*digit+i, ", "); //在分位的位置插入分位符 } return sb.reverse().toString(); } public void setFormatStr(String formatStr){ this.formatStr=formatStr; } }
(2)新建index.jsp頁,該頁主要用于輸入表單信息,關鍵代碼如下:
<form action="format.jsp"method="post"> <table> <tr> <td align="right">請輸入數字:</td> <td><input type="text"name="longValue"/></td> </tr> <tr> <td align="right">請輸入分位位數:</td> <td><input type="text"name="digit"/></td> </tr> <tr> <td colspan="2"align="center"><input type="submit"value="分位顯示"/></td> </tr> </table> </form>
(3)新建format.jsp頁,該頁用于獲取表單信息并調用StringUtil類的方法實現長數字的分位,關鍵代碼如下:
<% String longValueStr=request.getParameter("longValue"); //獲取表單中的長數字的字符串 String digit=request.getParameter("digit"); //獲取分位位數字符串 long longValue=Long.parseLong(longValueStr); //將長數字的字符串轉換為long類型 int d=Integer.parseInt(digit); //將分位位數字符串轉換為int類型 %> <! -- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類的longValue屬性賦值 --> <jsp:setProperty property="longValue"name="strBean"value="<%=longValue %>"/> <! -- 對StringUtil類的digit屬性賦值 --> <jsp:setProperty property="digit"name="strBean"value="<%=d %>"/> <table> <tr > <td >分位之前的數字:</td> <td align="left"> <jsp:getProperty property="longValue"name="strBean"/> </td> </tr> <tr > <td >分位之后的數字:</td> <td align="left"> <jsp:getProperty property="formatStr"name="strBean"/> </td> </tr> </table>
秘笈心法
對于本實例中計算分位位置的表達式“(i+1)*digit+i”可以這樣理解,如果準備插入第一個分隔符即i=0,那么應該跳過digit個字符在第digit位置處插入分隔符;如果已經插入了一個分隔符,準備插入第二個分隔符時,則應該跳過(i+1)*digit個字符,因為在這之前已經插入了一個分隔符,整個長度增加了一位,所以此時插入分隔符的位置應再加上分隔符的個數,即(i+1)*digit+i。
實例135 過濾輸入字符串中的危險字符
光盤位置:光盤\MR\05\135
初級
實用指數:
實例說明
在開發網站時,為了避免網站遭到SQL語句的注入式攻擊,應該考慮到過濾字符串中的危險字符。運行本實例,當在文本框中輸入“& ; ' < > -- / % = #”等字符時,在處理頁中會把這些字符過濾掉,然后顯示出過濾后的字符串,運行效果如圖5.11所示。

圖5.11 過濾輸入字符串中的危險字符
關鍵技術
本實例主要應用String類提供的replaceAll()方法,該方法用于過濾字符串中包含的所有指定的子字符串,其語法格式如下:
public String replaceAll(String regex, String replacement)
參數說明
? regex:表示需要替換的字符串。
? replacement:表示替換后的字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,該類實現了過濾字符串中的危險字符的方法,關鍵代碼如下:
public class StringUtil { private String sourceStr; //源字符串 private String targetStr; //替換后的字符串 public String getSourceStr() { return sourceStr; } public void setSourceStr(String sourceStr) { this.sourceStr = sourceStr; } public String getTargetStr() { sourceStr=sourceStr.replaceAll("&", "& "); //過濾字符& sourceStr=sourceStr.replaceAll("; ", ""); //過濾字符; sourceStr=sourceStr.replaceAll("'", ""); //過濾字符’ sourceStr=sourceStr.replaceAll("<", "< "); //過濾字符< sourceStr=sourceStr.replaceAll(">", ">"); //過濾字符> sourceStr=sourceStr.replaceAll("/", ""); //過濾字符/ sourceStr=sourceStr.replaceAll("%", ""); //過濾字符% sourceStr=sourceStr.replaceAll("=", ""); //過濾字符= targetStr = sourceStr; return targetStr; } public void setTargetStr(String targetStr){ this.targetStr=targetStr; } }
(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:
<form action="filterstr.jsp"method="post"> <table> <tr> <td align="right">請輸入字符串:</td> <td><input type="text"name="sourceStr" size="40"/></td> </tr> <tr> <td colspan="2"align="center"><input type="submit"value="過濾"/></td> </tr> </table> </form>
(3)新建filterstr.jsp頁,用于獲得提交過來的表單信息,并通過StringUtil類來實現過濾危險字符,關鍵代碼如下:
<% String sourceStr = request.getParameter("sourceStr"); %> <! -- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類的sourceStr屬性賦值 --> <jsp:setProperty property="sourceStr"name="strBean"value="<%=sourceStr %>"/> <table> <tr> <td>過濾之前的字符串:</td> <td align="left"> <jsp:getProperty property="sourceStr"name="strBean"/> </td> </tr> <tr > <td>過濾之后的字符串:</td> <td align="left"> <jsp:getProperty property="targetStr"name="strBean"/> </td> </tr> </table>
秘笈心法
在開發網站的用戶登錄模塊、信息添加模塊以及信息修改模塊時,為了防止SQL語句的注入式攻擊,應該對表單中的數據進行特殊字符過濾。
實例136 過濾字符串中的空格與NULL值
光盤位置:光盤\MR\05\136
初級
實用指數:
實例說明
在用戶輸入表單信息時,有些文本框的內容不允許為空,而且輸入的字符串不允許包含空格。在讀取數據庫中的數據時,如果有些字段被允許為空值,那么在讀取該字段值時將導致程序出現異常,所以在程序中應該過濾掉這些空值或者包含空格的字符串,實例運行效果如圖5.12所示。

圖5.12 過濾字符串中的空格或NULL值
關鍵技術
本實例主要應用String類中提供的replaceAll()方法,該方法用于替換字符串中指定的子字符串。
設計過程
(1)新建名為StringUtil的JavaBean類,該類用于過濾字符串中的空格或NULL值,關鍵代碼如下:
public class StringUtil { private String sourceStr; //源字符串 private String targetStr; //過濾后的字符串 public StringUtil(){} //默認的構造方法 public String getSourceStr() { return sourceStr; } public void setSourceStr(String sourceStr) { this.sourceStr = sourceStr; } public String getTargetStr() { if(sourceStr==null){ //如果源字符串為NULL sourceStr=""; } sourceStr=sourceStr.replaceAll("", ""); //如果源字符串中包含空格則替換 targetStr = sourceStr; return targetStr; } public void setTargetStr(String targetStr) { this.targetStr = targetStr; } }
(2)新建index.jsp頁,用于輸入字符串信息,關鍵代碼如下:
<form action="filterstr.jsp"method="post"> <table> <tr> <td align="right">請輸入字符串:</td> <td><input type="text"name="sourceStr" size="30"/></td> </tr> <tr> <td colspan="2"align="center"><input type="submit"value="過濾"/></td> </tr> </table> </form>
(3)新建filterstr.jsp頁,該頁用于獲取用戶輸入的表單信息,并通過使用StringUtil類來實現字符串過濾,關鍵代碼如下:
<% String sourceStr = request.getParameter("sourceStr"); %> <! -- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類的sourceStr屬性賦值 --> <jsp:setProperty property="sourceStr"name="strBean"value="<%=sourceStr %>"/> <table> <tr> <td>過濾之前的字符串:</td> <td align="left"><jsp:getProperty property="sourceStr"name="strBean"/></td> </tr> <tr> <td>過濾之后的字符串:</td> <td align="left"><jsp:getProperty property="targetStr"name="strBean"/></td> </tr> </table>
秘笈心法
為了防止向數據庫中插入包含大量空格或NULL值的冗余數據,應該在數據插入到數據庫之前,對數據中可能包含的空格或NULL值進行過濾。
實例137 獲取漢字的拼音簡碼
光盤位置:光盤\MR\05\137
初級
實用指數:
實例說明
本實例可以獲得用戶輸入漢字的拼音的第一個字母,這里涉及的是常用漢字,一些特殊漢字沒有按照這個規律編碼,請根據實際情況另行判斷,實例運行效果如圖5.13所示。

圖5.13 獲取漢字的拼音簡碼
關鍵技術
本實例首先將輸入的字符串轉換為數組,然后循環該數組,在循環中使用String類的getBytes()方法將每個字符都轉換為字節數組,根據字節數組的長度來判斷當前這個字符是漢字還是字母。
如果當前字符為漢字,首先計算出該漢字的Unicode編碼,然后根據漢字的Unicode編碼范圍來指定當前漢字的首字母。
Unicode字符集是一種雙字節編碼方式的字符集,使用0~65535之間的雙字節無符號整數對每個字符進行編碼,可以定義65536個不同的字符。Unicode字符集是對ASCII碼字符集的擴展,Unicode字符集中的前128個字符對應ASCII碼字符集中的字符并且與之具有相同的編碼值。
設計過程
(1)新建StringUtil的JavaBean類,該類實現了獲取漢字拼音簡碼的方法,關鍵代碼如下:
public class StringUtil { private String sourceStr; //源字符串 private String shortPhonetic=""; //獲得漢字的拼音簡碼字符串 public String getSourceStr() { return sourceStr; } public void setSourceStr(String sourceStr) { this.sourceStr = sourceStr; } public String getShortPhonetic() { char cArr[]=sourceStr.toCharArray(); //將字符串轉換為數組 byte b[] ; String sp=""; //該變量用于在循環中保存單個字的拼音首字母 for(int i=0; i<cArr.length; i++){ b=String.valueOf(cArr[i]).getBytes(); if(b.length>1){ //如果字符串字節長度大于1,則為漢字 int code=256*(b[0]+256)+(b[1]+256); //根據字節值獲得漢字的Unicode無符號編碼 /**以下代碼根據漢字的編碼范圍指定漢字的拼音首字母*/ if (code >= 45217 && code <= 45252) { sp="A"; } else if (code >= 45253 && code <= 45760) { sp="B"; } else if (code >= 45761 && code <= 46317) { sp="C"; } else if (code >= 46318 && code <= 46825) { sp="D"; } else if (code >= 46826 && code <= 47009) { sp="E"; } else if (code >= 47010 && code <= 47296) { sp="F"; } else if (code >= 47297 && code <= 47613) { sp="G"; } else if (code >= 47614 && code <= 48118) { sp="H"; } else if (code >= 48119 && code <= 49061) { sp="J"; } else if (code >= 49062 && code <= 49323) { sp="K"; } else if (code >= 49324 && code <= 49895) { sp="L"; } else if (code >= 49896 && code <= 50370) { sp="M"; } else if (code >= 50371 && code <= 50613) { sp="N"; } else if (code >= 50614 && code <= 50621) { sp="O"; } else if (code >= 50622 && code <= 50905) { sp="P"; } else if (code >= 50906 && code <= 51386) { sp="Q"; } else if (code >= 51387 && code <= 51445) { sp="R"; } else if (code >= 51446 && code <= 52217) { sp="S"; } else if (code >= 52218 && code <= 52697) { sp="T"; } else if (code >= 52698 && code <= 52979) { sp="W"; } else if (code >= 52980 && code <= 53640) { sp="X"; } else if (code >= 53689 && code <= 54480) { sp="Y"; } else if (code >= 54481 && code <= 62289) { sp="Z"; } } else{ //如果為英文字母,則直接返回字母本身 sp=String.valueOf(cArr[i]); } shortPhonetic+=sp; //將轉換后的每個漢字拼音簡碼連接成一個字符串 } return shortPhonetic; } }
(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:
<form action="getshortphonetic.jsp"method="post"> <table> <tr> <td align="right">請輸入漢字:</td> <td><input type="text"name="sourceStr" size="30"/></td> </tr> <tr> <td colspan="2"align="center"><input type="submit"value="獲取拼音簡碼"/></td> </tr> </table> </form>
(3)新建getshortphonetic.jsp頁,用于獲得表單信息,并通過StringUtil類獲得漢字字符串的拼音簡碼,關鍵代碼如下:
<% String sourceStr = request.getParameter("sourceStr"); %> <! -- 使用useBean動作標簽導入JavaBean對象 --> <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean> <! -- 對StringUtil類的sourceStr屬性賦值 --> <jsp:setProperty property="sourceStr"name="strBean"value="<%=sourceStr %>"/> <table> <tr> <td>輸入的漢字:</td> <td align="left"> <jsp:getProperty property="sourceStr"name="strBean"/> </td> </tr> <tr> <td>拼音簡碼:</td> <td align="left"> <jsp:getProperty property="shortPhonetic"name="strBean"/> </td> </tr> </table>
秘笈心法
根據本實例,讀者可以設置網上書城中顯示圖書名稱的拼音簡碼功能,還可以將網頁中的信息按中文拼音排序。
- ASP.NET Core:Cloud-ready,Enterprise Web Application Development
- Apache Hive Essentials
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- UI智能化與前端智能化:工程技術、實現方法與編程思想
- concrete5 Cookbook
- 編程數學
- Learning Laravel's Eloquent
- Express Web Application Development
- Windows Embedded CE 6.0程序設計實戰
- 零基礎學Kotlin之Android項目開發實戰
- Spring+Spring MVC+MyBatis從零開始學
- MySQL程序員面試筆試寶典
- OpenStack Networking Essentials
- Hadoop 2.X HDFS源碼剖析
- 監控的藝術:云原生時代的監控框架