隨筆-153  評論-235  文章-19  trackbacks-0
              用String.substring方法,不小心會有越界異常。現實現一個沒拋出越界異常,越界就返回null,不過直接返回的再用其它方法,可能有Null異常。現還實現可以負index的,可能逆向的。
          package com.chenlb.util;   
            
          public class StringUtil {   
                 
              
          /**  
               * start與end均可負數<br/>  
               * start < end正向取, start > end逆向取<br/>  
               * 示例:str="I am chenlb"<br/>  
               * StringUtil.substring(str, 0, 12) -> null<br/>  
               * StringUtil.substring(str, 12, 12) -> null<br/>  
               * StringUtil.substring(str, 12, 13) -> null<br/>  
               * StringUtil.substring(str, 4, 4) -> ""<br/>  
               * StringUtil.substring(str, 0, 4) -> "I am"<br/>  
               * StringUtil.substring(str, -4, -1) -> "enl"<br/>  
               * StringUtil.substring(str, -2, 4) -> "lbI am"<br/>  
               * StringUtil.substring(str, 4, 0) -> "ma I"<br/>  
               * StringUtil.substring(str, -1, -4) -> "lne"<br/>  
               * StringUtil.substring(str, 1, -4) -> "Iblne"<br/>  
               * StringUtil.substring(str, 0, -4) -> "blne"<br/>  
               * StringUtil.substring(str, -4, 0) -> "enlb"<br/>  
               * 
          @return 越界返回null, start==end返回空  
               * 
          @author chenlb 2008-6-18 下午12:39:51  
               
          */  
              
          public static String substring(String str, int start, int end) {   
                  
          if(str == null) {   
                      
          return null;   
                  }   
                  
          int len = str.length();   
                  
          if(Math.abs(start) >= len) {   
                      
          return null;   
                  }   
                  
          if(Math.abs(end) > len) {   
                      
          return null;   
                  }   
                  StringBuilder sb 
          = new StringBuilder();   
                  
          if(end > start) {    //正向   
                      substring(sb, str, start, end);   
                  } 
          else if(end == start) {   
                      
          return "";   
                  } 
          else {    //逆向 end < start   
                      substring(sb, str, end, start);   
                      sb.reverse();   
                  }   
                  
          return sb.toString();   
              }   
                 
              
          private static void substring(StringBuilder sb, String str, int start, int end) {   
                  
          int len = str.length();   
                  
          if(start < 0) {   
                      
          if(end < 0) {   
                          sb.append(str.substring(len
          +start, len+end));   
                      } 
          else {   
                          sb.append(str.substring(len
          +start, len));   
                          sb.append(str.substring(
          0, end));   
                      }   
                  } 
          else {   
                      sb.append(str.substring(start, end));   
                  }   
              }   
          }  

          測試代碼:
          public void testSubstring() {   
                  String str 
          = "I am chenlb";   
                     
                  assertEquals(
          null, StringUtil.substring(str, 012));   
                  assertEquals(
          null, StringUtil.substring(str, 1212));   
                  assertEquals(
          null, StringUtil.substring(str, 1213));   
                     
                  assertEquals(
          "", StringUtil.substring(str, 44));   
                     
                  assertEquals(
          "I am", StringUtil.substring(str, 04));   
                  assertEquals(
          "am", StringUtil.substring(str, 24));   
                  assertEquals(
          "I am chenlb", StringUtil.substring(str, 011));   
                     
                  assertEquals(
          "enl", StringUtil.substring(str, -4-1));   
                  assertEquals(
          "lbI am", StringUtil.substring(str, -24));   
                     
                  assertEquals(
          "ma I", StringUtil.substring(str, 40));   
                  assertEquals(
          "lne", StringUtil.substring(str, -1-4));   
                  assertEquals(
          "Iblne", StringUtil.substring(str, 1-4));   
                     
                  assertEquals(
          "blne", StringUtil.substring(str, 0-4));   
                  assertEquals(
          "enlb", StringUtil.substring(str, -40));   
          }  
          posted on 2008-06-24 13:53 流浪汗 閱讀(556) 評論(0)  編輯  收藏 所屬分類: JAVA/J2EE

           
          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿(14)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          友情鏈接

          同學鏈接

          學習鏈接

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 560143
          • 排名 - 86

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜宾县| 游戏| 分宜县| 宜章县| 南澳县| 措美县| 龙江县| 方正县| 云浮市| 曲松县| 扬中市| 磴口县| 林口县| 石景山区| 南昌市| 宜章县| 全椒县| 浮山县| 定西市| 东源县| 永新县| 高雄市| 泌阳县| 苏尼特右旗| 环江| 新兴县| 屏边| 新余市| 南溪县| 宜兰县| 东宁县| 田阳县| 金昌市| 孟连| 海伦市| 双鸭山市| 浮梁县| 瑞金市| 依兰县| 侯马市| 怀来县|