java中split() 、replace()、 replaceAll()三个函数分析

来源:互联网 发布:lua源码 编辑:程序博客网 时间:2024/06/06 01:39

本文系转载,转自:http://feigme.iteye.com/blog/147259

java.lang.String split


String的split方法是直接按照给定的字符串对字符串进行拆分,例如
[java] view plaincopy
  1. String value = "a,b,c,d,e";  
  2. String[] names = value.split(",");  
  3. for(int i=0,n=names.length;i  
  4. System.out.print(names[i]);  
  5. }   

运行结果:

a b c d e

但是在做ip解析时发现出了问题,代码如下:

[java] view plaincopy
  1. String value = "209.242.1.1";  
  2. String[] names = value.split(".");  
  3. for(int i=0,n=names.length;i  
  4. System.out.print(names[i]+" ");  
  5. }   

理想的输出结果应该是219 242 1 1,结果什么都没有输出。

很奇怪哦。看一下split的方法签名吧。

[java] view plaincopy
  1. public String[] split(String regex)   

这里的参数的名称是regex ,也就是 Regular Expression(正则表达式)。这个参数并不是一个简单的分割用的字符,而是一个正则表达式:

[java] view plaincopy
  1. public String[] split(String regex, int limit) {  
  2. return Pattern.compile(regex).split(this, limit);  
  3. }   

split 的实现直接调用的 Matcher 类的 split 的方法。“. ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义。

修改代码如下: 

[java] view plaincopy
  1. String value = "209.242.1.1";  
  2. String[] names = value.split("\\.");  
  3. for(int i=0,n=names.length;i  
  4. System.out.print(names[i]+" ");  
  5. }   
Replace 方法
首先看看Replace方法的介绍
[java] view plaincopy
  1. String java.lang.String.replace(char oldChar, char newChar)  
  2. Returns a new string resulting from replacing all occurrences of oldChar in  
  3. this string with newChar.  
  4. If the character oldChar does not occur in the character sequence represented by  
  5. this String object, then a reference to this String object is returned. Otherwise,  
  6. new String object is created that represents a character sequence identical to  
  7. the character sequence represented by this String object, except that every  
  8. occurrence of oldChar is replaced by an occurrence of newChar.  
  9. Examples:  
  10. "mesquite in your cellar".replace('e''o')  
  11. returns "mosquito in your collar"  
  12. "the war of baronets".replace('r''y')  
  13. returns "the way of bayonets"  
  14. "sparring with a purple porpoise".replace('p''t')  
  15. returns "starring with a turtle tortoise"  
  16. "JonL".replace('q''x') returns "JonL" (no change)  
  17. Parameters:  
  18. oldChar the old character.  
  19. newChar the new character.  
  20. Returns:  
  21. a string derived from this string by replacing every occurrence of oldChar with newChar.  
用法 :
[java] view plaincopy
  1. @Test  
  2. public void testReplace(){  
  3. String A = "aaa bCskd dkkAik kdaFe";  
  4. System.out.println(A.replace('a''_'));  
  5. }  
结果为:___ bCskd dkkAik kd_Fe

此方法用来替换char字符,对字符串不能处理
A.replace('aaa', '=') 是错误的

但是 
A.replace(“aaa”, “=”)却是可以的
[java] view plaincopy
  1. @Test  
  2. public void testReplace(){  
  3. String A = "aaa bCskd dkkAik kaaaFe";  
  4. System.out.println(A.replace("aaa""="));  
  5. }  
结果为:= bCskd dkkAik k=Fe

可见 replace("","")与方法replaceAll("","")拥有差不多的功能
仔细看看差别
[java] view plaincopy
  1. String java.lang.String.replace(CharSequence target, CharSequence replacement)  
  2. Replaces each substring of this string that matches the literal target sequence  
  3. with the specified literal replacement sequence. The replacement proceeds from  
  4. the beginning of the string to the end, for example, replacing "aa" with "b" in  
  5. the string "aaa" will result in "ba" rather than "ab".  
  6. Parameters:  
  7. target The sequence of char values to be replaced  
  8. replacement The replacement sequence of char values  
  9. Returns:  
  10. The resulting string  
  11. Throws:  
  12. NullPointerException if target or replacement is null.  
  13. Since:  
  14. 1.5  
是1.5之后才有的功能哦

但是 replaceAll却更强大
[java] view plaincopy
  1. @Test  
  2. public void testReplace(){  
  3. String A = "aaa bCskd dkkAik kaaaFe";  
  4. System.out.println(A.replace(" """));  
  5. }   
结果为aaabCskddkkAikkaaaFe 
replaceAll可以将字符串内部的空格去掉
但是用replace(' ','')方法却不可以
replace(" ","")方法可以

另外一点
[java] view plaincopy
  1. @Test  
  2. public void testReplace(){  
  3. String A = "aaa bCskd dkkAik kaaaFe";  
  4. System.out.println(A.replaceAll("[a-z]""="));  
  5. }   
结果为:=== =C=== ===A== ====F=
replaceAll可以用正则表达式,强大啊
我们看看replaceAll的用法
java 代码
[java] view plaincopy
  1. String java.lang.String.replaceAll(String regex, String replacement)  
  2. Replaces each substring of this string that matches the given regular expression  
  3. with the given replacement.  
  4. An invocation of this method of the form str.replaceAll(regex, repl) yields exactly  
  5. the same result as the expression  
  6. java.util.regex.Pattern. compile(regex).java.util.regex.Pattern.matcher(java.lang.CharSequence) matcher(str). replaceAll(repl)  
  7. See Also:  
  8. java.util.regex.Pattern  
  9. Parameters:  
  10. regex the regular expression to which this string is to be matched  
  11. Returns:  
  12. The resulting String  
  13. Throws:  
  14. PatternSyntaxException if the regular expression's syntax is invalid  
  15. Since:  
  16. 1.4  
  17. @spec  
  18. JSR-51  
0 0
原创粉丝点击