tinguo002

           

          java正則表達式 提取、替換(轉)

          java正則表達式 提取、替換

          事例1
          http://www.cnblogs.com/lihuiyy/archive/2012/10/08/2715138.html
          比如,現在有一個 endlist.txt 文本文件,內容如下:
          1300102,北京市
          1300103,北京市
          1300104,北京市
          1300105,北京市
          1300106,北京市
          1300107,北京市
          1300108,北京市
          1300109,北京市
          1300110,北京市
          1300111,北京市
          1300112,北京市
          1300113,北京市
          1300114,北京市
          1300115,北京市
          1300116,北京市
          1300117,北京市
          1300118,北京市
          1300119,北京市
          七位數字代表手機號碼的前七位,后面的漢字表示號碼歸屬地。現在我要將這些內容按照 130 131 132...  開頭分別寫到 130.txt 131.txt 132.txt.....這些文件中。
          public static void main(String args[]) {
                   File file 
          = null;
                   BufferedReader br 
          = null;
                   StringBuffer buffer 
          = null;
                   String childPath 
          = "src/endlist.txt";
                   String data 
          = "";
                   
          try {
                       file 
          = new File(childPath);
                       buffer 
          = new StringBuffer();
                       InputStreamReader isr 
          = new InputStreamReader(new FileInputStream(file), "utf-8");
                       br 
          = new BufferedReader(isr);
                       
          int s;
                       
          while ((s = br.read()) != -1{
                           buffer.append((
          char) s);
                       }

                       data 
          = buffer.toString();
                   }
           catch (Exception e) {
                       e.printStackTrace();
                   }

                   Map
          <String, ArrayList<String>> resultMap = new HashMap<String, ArrayList<String>>();
                   
          for (int i = 0; i < 10; i++{
                       resultMap.put(
          "13" + i, new ArrayList<String>());
                   }

           
                  Pattern pattern = Pattern.compile("(\\d{3})(\\d{4},[\u4e00-\u9fa5]*\\n)");
                   Matcher matcher = pattern.matcher(data);          
          while (matcher.find()) {
                       resultMap.get(matcher.group(
          1)).add(matcher.group(2));
                   }

                   
          for (int i = 0; i < 10; i++{
                       
          if (resultMap.get("13" + i).size() > 0{
                           
          try {
                               File outFile 
          = new File("src/13" + i + ".txt");
                               FileOutputStream outputStream 
          = new FileOutputStream(outFile);
                               OutputStreamWriter writer 
          = new OutputStreamWriter(outputStream, "utf-8");
                               ArrayList
          <String> tempList = resultMap.get("13" + i);
                               
          for (int j = 0; j < tempList.size(); j++{
                                   writer.append(resultMap.get(
          "13" + i).get(j));
                               }

                               writer.close();
                               outputStream.close();
                           }
           catch (Exception e) {
                               
          // TODO Auto-generated catch block
                               e.printStackTrace();
                           }

                       }

                   }

               }

          第24行使用正則表達式  "(\\d{3})(\\d{4},[\u4e00-\u9fa5]*\\n)" 每個()中的內容為一組,索引從 1 開始,0表示整個表達式。所以這個表達式分為兩組,第一組表示3個數字,第二組表示 4個數字加多個漢字加一個換行符。提取時如26-28行所示。



          事例2
          http://www.cnblogs.com/jxgxy/archive/2012/07/30/2615997.html
          import java.util.ArrayList;
          import java.util.regex.Matcher;
          import java.util.regex.Pattern;

          public class test {
              
          public static void main(String[] args) {
                  getStrings(); 
          //用正則表達式獲取指定字符串內容中的指定內容
                  System.out.println("********************");
                  replace(); 
          //用正則表達式替換字符串內容
                  System.out.println("********************");
                  strSplit(); 
          //使用正則表達式切割字符串
                  System.out.println("********************");
                  strMatch(); 
          //字符串匹配
              }


              
          private static void strMatch() {
                  String phone 
          = "13539770000";
                  
          //檢查phone是否是合格的手機號(標準:1開頭,第二位為3,5,8,后9位為任意數字)
                  System.out.println(phone + ":" + phone.matches("1[358][0-9]{9,9}")); //true    
                  
                  String str 
          = "abcd12345efghijklmn";
                  
          //檢查str中間是否包含12345
                  System.out.println(str + ":" + str.matches("\\w+12345\\w+")); //true
                  System.out.println(str + ":" + str.matches("\\w+123456\\w+")); //false
              }


              
          private static void strSplit() {
                  String str 
          = "asfasf.sdfsaf.sdfsdfas.asdfasfdasfd.wrqwrwqer.asfsafasf.safgfdgdsg";
                  String[] strs 
          = str.split("\\.");
                  
          for (String s : strs){
                      System.out.println(s);
                  }
                  
              }


              
          private static void getStrings() {
                  String str 
          = "rrwerqq84461376qqasfdasdfrrwerqq84461377qqasfdasdaa654645aafrrwerqq84461378qqasfdaa654646aaasdfrrwerqq84461379qqasfdasdfrrwerqq84461376qqasfdasdf";
                  Pattern p 
          = Pattern.compile("qq(.*?)qq");
                  Matcher m 
          = p.matcher(str);
                  ArrayList
          <String> strs = new ArrayList<String>();
                  
          while (m.find()) {
                      strs.add(m.group(
          1));            
                  }
           
                  
          for (String s : strs){
                      System.out.println(s);
                  }
                  
              }


              
          private static void replace() {
                  String str 
          = "asfas5fsaf5s4fs6af.sdaf.asf.wqre.qwr.fdsf.asf.asf.asf";
                  
          //將字符串中的.替換成_,因為.是特殊字符,所以要用\.表達,又因為\是特殊字符,所以要用\\.來表達.
                  str = str.replaceAll("\\.""_");
                  System.out.println(str);        
              }

          }















          歡迎大家訪問我的個人網站 萌萌的IT人

          posted on 2013-05-31 20:26 一堣而安 閱讀(3025) 評論(0)  編輯  收藏 所屬分類: java

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 伽师县| 甘谷县| 临海市| 灯塔市| 太仆寺旗| 赞皇县| 青川县| 容城县| 泗洪县| 洞口县| 云安县| 望江县| 兴国县| 上杭县| 宿州市| 巴彦淖尔市| 抚宁县| 常山县| 桦南县| 巧家县| 吉水县| 湘西| 阳江市| 长岭县| 云阳县| 吴桥县| 若尔盖县| 黄浦区| 遵义市| 额尔古纳市| 延长县| 河北省| 莲花县| 宁乡县| 大荔县| 墨竹工卡县| 始兴县| 昆明市| 江川县| 开平市| 舒城县|