|  之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题,但是最近一次笔试中居然有碰到了这个知识点,而且还做错了,囧!学艺不精啊。题目大概是这样的:  
  
  
   Strings2="thisisatest"; Stringsarray[]=s2.split("/s"); System.out.println("sarray.length="+sarray.length);  这个输出是什么还是编译出错?我想那个split方法中的参数要是"s"的话,输出一定是4了,就是将原来字符串分成了数组{"thi","i","a te","t"},但是原题split方法中的参数要是"/s",那么这个参数到底是嘛意思呢,实验后输出结果居然是1。  原因还得深究啊。     java.lang.string.split,即split 方法,它实现的功能是将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 格式为:   stringObj.split([separator,[limit]])其中stringObj是必选项,表示要被分解的 String 对象或文字。该对象不会被 split 方法修改。 separator 为可选项,表示字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。 limit 为可选项,该值用来限制返回数组中的元素个数。 值得注意的是: split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解,separator 不作为任何数组元素的部分返回。
  一个例子  
  Stringsrcstring="thisisaaboutsplittest"; 
   Stringstringarray[]=srcstring.split(""); 
    
   for(Stringstemp:stringarray){ 
   System.out.println(stemp); 
   } 
   Stringsrcstring1="thisisaaboutsplittest"; 
    
   Stringstringarray1[]=srcstring1.split(""); 
  for(Stringstemp:stringarray1){ 
   }  这样输出结果为 this 
  is 
   a 
   about 
   split 
   test 
    
   另一个: 
   test  另外一个例子  Stringsrcstring="thisisaaboutsplittest"; 
  Stringstringarray[]=srcstring.split("",2); 
  ////在每个空格字符处进行分解 
  for(Stringstemp:stringarray){ 
   System.out.println(stemp); 
   } 
   输出结果为 
   isaaboutsplittest  看看下面这个  Stringipstring="59.64.159.224"; 
  Stringiparray[]=ipstring.split("."); 
  for(Stringstemp:iparray){ 
   这个输出为空,为什么呢?  因为 public string[] split(string regex) 这里的参数的名称是regex ,也就是 regular expression (正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式,以下是split 方法的实现代码:public string[] split(string regex,int limit) {
 return pattern.compile(regex).split(this,limit);
 }
  split 的实现直接调用的 matcher 类的 split 的方法。我们知道,“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。 只要将  Stringiparray[]=ipstring.split("."); 
  
  改为  Stringiparray[]=ipstring.split("."); 
  
  就可以了。
  那么这里在列上一些转义字符  反斜杠t间隔('u0009')
 n换行('u000A')
 r回车('u000D')
 d数字等价于[0-9]
 D非数字等价于[^0-9]
 s空白符号[tnx0Bfr]
 S非空白符号[^tnx0Bfr]
 w单独字符[a-zA-Z_0-9]
 W非单独字符[^a-zA-Z_0-9]
 f换页符
 e Escape
 b一个单词的边界
 B一个非单词的边界
 G前一个匹配的结束
  
  
 为限制开头^java 条件限制为以Java为开头字符
 $为限制结尾
 java$ 条件限制为以java为结尾字符
 .条件限制除n以外任意一个单独字符
 java.. 条件限制为java后除换行外任意两个字符
 加入特定限制条件「[]」[a-z] 条件限制在小写a to z范围中一个字符
 [A-Z] 条件限制在大写A to Z范围中一个字符
 [a-zA-Z]条件限制在小写a to z或大写A to Z范围中一个字符
 [0-9] 条件限制在小写0 to 9范围中一个字符
 [0-9a-z]条件限制在小写0 to 9或a to z范围中一个字符
 [0-9[a-z]]条件限制在小写0 to 9或a to z范围中一个字符(交集)
 
 []中加入^后加再次限制条件「[^]」
 [^a-z] 条件限制在非小写a to z范围中一个字符
 [^A-Z] 条件限制在非大写A to Z范围中一个字符
 [^a-zA-Z]条件限制在非小写a to z或大写A to Z范围中一个字符
 [^0-9] 条件限制在非小写0 to 9范围中一个字符
 [^0-9a-z]条件限制在非小写0 to 9或a to z范围中一个字符
 [^0-9[a-z]]条件限制在非小写0 to 9或a to z范围中一个字符(交集)
 在限制条件为特定字符出现0次以上时,可以使用「*」J*  0个以上J
 .*  0个以上任意字符
 J.*D  J与D之间0个以上任意字符
 
 在限制条件为特定字符出现1次以上时,可以使用「+」
 J+  1个以上J
 .+  1个以上任意字符
 J.+D  J与D之间1个以上任意字符
 
 在限制条件为特定字符出现有0或1次以上时,可以使用「?」
 JA?  J或者JA出现
 限制为连续出现指定次数字符「{a}」J{2}  JJ
 J{3}  JJJ
 文字a个以上,并且「{a,}」
 J{3,}  JJJ,JJJJ,JJJJJ,???(3次以上J并存)
 文字个以上,b个以下「{a,b}」
 J{3,5}  JJJ或JJJJ或JJJJJ
 两者取一「|」
 J|A  J或A
 Java|Hello  Java或Hello
 「()」中规定一个组合类型比如,我查询<a href="index.html">index</a>中<a href></a>间的数据,可写作<a.*href=".*">(.+?)</a>
 
 ◆比如,在字符串包含验证时
 //查找以Java开头,任意结尾的字符串
 Pattern pattern = Pattern.compile("^Java.*");
 Matcher matcher = pattern.matcher("Java不是人");
 boolean b= matcher.matches();
 //当条件满足时,将返回true,否则返回false
 System.out.println(b);
 
 以多条件分割字符串时
 Pattern pattern = Pattern.compile("[,|]+");
 String[] strs = pattern.split("Java Hello World Java,Hello,World|Sun");
 for (int i=0;i<strs.length;i++) {
 System.out.println(strs[i]);
 }
 
 文字替换(首次出现字符)
 Pattern pattern = Pattern.compile("正则表达式");
 Matcher matcher = pattern.matcher("Hello World,sans-serif; font-size:14px; line-height:25.1875px">Hello World");
 //替换第一个符合正则的数据
 System.out.println(matcher.replaceFirst("Java"));
 
 文字替换(全部)
 System.out.println(matcher.replaceAll("Java"));
 
 
 文字替换(置换字符)Hello World ");
 StringBuffer sbr = new StringBuffer();
 while (matcher.find()) {
 matcher.appendReplacement(sbr,"Java");
 }
 matcher.appendTail(sbr);
 System.out.println(sbr.toString());
 
 验证是否为邮箱地址
 
 String str="ceponline@yahoo.com.cn";
 Pattern pattern = Pattern.compile("[w.-]+@([w-]+.)+[w-]+",Pattern.CASE_INSENSITIVE);
 Matcher matcher = pattern.matcher(str);
 System.out.println(matcher.matches());
 
 去除html标记
 Pattern pattern = Pattern.compile("<.+?>",Pattern.DOTALL);
 Matcher matcher = pattern.matcher("<a href="index.html">主页</a>");
 String string = matcher.replaceAll("");
 System.out.println(string);
 
 查找中对应条件字符串
 Pattern pattern = Pattern.compile("href="(.+?)"");
 Matcher matcher = pattern.matcher("<a href="index.html"></a>");
 if(matcher.find())
 System.out.println(matcher.group(1));
 }
 
 截取http://地址
 //url
 Pattern pattern = Pattern.compile("(http://|https://){1}[w.-/:]+");
 Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
 StringBuffer buffer = new StringBuffer();
 while(matcher.find()){
 buffer.append(matcher.group());
 buffer.append("rn");
 System.out.println(buffer.toString());
 }
 
 替换指定{}中文字
 
 String str = "Java目前的发展史是由{0}年-{1}";
 String[][] object={new String[]{"{0}","1995"},new String[]{"{1}","2007"}};
 System.out.println(replace(str,object));
 
 public static String replace(final String sourceString,Object[] object) {
 String temp=sourceString;
 for(int i=0;i<object.length;i++){
 String[] result=(String[])object[i];
 Pattern pattern = Pattern.compile(result[0]);
 Matcher matcher = pattern.matcher(temp);
 temp=matcher.replaceAll(result[1]);
 }
 return temp;
 }
 
 
 以正则条件查询指定目录下文件用于缓存文件列表
 private ArrayList files = new ArrayList();
 //用于承载文件路径
 private String _path;
 //用于承载未合并的正则公式
 private String _regexp;
 
 class MyFileFilter implements FileFilter {
 
 /**
 *匹配文件名称
 */
 public boolean accept(File file) {
 try {
 Pattern pattern = Pattern.compile(_regexp);
 Matcher match = pattern.matcher(file.getName());
 return match.matches();
 } catch (Exception e) {
 return true;
 }
 }
 }
 
 /**
 *解析输入流   * @param inpu
 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |