关于String类中的replace()和replaceAll()关于String类中的replace()和replaceAll()关于String类中的replace()和replaceAll()
1 package cn.itcast.stringrepalce; 2 3 public class StringReplaceDemo { 4 /* replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: 5 1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 6 2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号; 7 相同点是都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 8 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的时,只替换第一次出现的字符串; 9 另外,如果replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()替换字符串的效果是一样的,即这两者也支持字符串的操作; 10 还有一点注意:执行了替换操作后,源字符串的内容是没有发生改变的. 11 12 13 这两者有些人很容易搞混,因此我在这里详细讲述下。 14 replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串); 15 replaceAll的参数是regex,即基于规则表达式的替换,比如:可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号; 16 相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串; 17 不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\\d", "*"),而replace则不会,replace("\\d","*")就是替换"\\d"的字符串,而不会解析为正则。 18 另外还有一个不同点:“\”在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\\" ) ; 19 只打印出一个"\"。但是“\”也是正则表达式中的转义字符,需要用两个代表一个。 20 所以:\\\\被java转换成\\,\\又被正则表达式转换成\,因此用replaceAll替换“\”为"\\",就要用replaceAll("\\\\","\\\\\\\\"), 21 而replace则replace("\\","\\\\")。 22 23 如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。 24 */ 25 26 public static void main(String[] args) { 27 String src = new String("ab43a2c43d"); 28 29 //replace(CharSequence target, CharSequence replacement) 30 System.out.println(src.replace("3", "f"));// =>ab4f2c4fd. 31 32 //replace(char oldChar, char newChar) 33 System.out.println(src.replace('3', 'f'));// =>ab4f2c4fd. 34 35 //replaceAll(String regex, String replacement) 36 System.out.println(src.replaceAll("\\d", "f"));// =>abffafcffd. 37 38 //replaceAll(String regex, String replacement) 39 System.out.println(src.replaceAll("a", "f"));// =>fb43fc23d. 40 41 //replaceFirst(String regex, String replacement) 42 System.out.println(src.replaceFirst("\\d","f"));//=>abf32c43d\ 43 44 //replaceFirst(String regex, String replacement) 45 System.out.println(src.replaceFirst("4", "h"));// =>abh32c43d. 46 47 48 String msgIn = "\\"; 49 String msgOut; 50 msgOut=msgIn.replaceAll("\\\\","\\\\\\\\"); 51 System.out.println(msgOut);// 输出 \\ 52 53 54 //将字符串中的'/'替换成'\'的几种方式: 55 msgIn="/"; 56 msgOut= msgIn.replaceAll("/", "\\\\"); 57 System.out.println(msgOut);// 输出 \ 58 59 msgOut= msgIn.replace("/", "\\"); 60 System.out.println(msgOut);// 输出 \ 61 62 msgOut= msgIn.replace('/', '\\'); 63 System.out.println(msgOut);// 输出 \ 64 } 65 }
下面说一下关于List中的add和addAll方法.
add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小。
附上源码:
//add源代码: public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e; return true; } //addAll源代码: //将Collection c内的数据插入ArrayList中 public boolean addAll(Collection<? extends E> c) { Object[] a = c.toArray(); int numNew = a.length; ensureCapacityInternal(size + numNew); // Increments modCount System.arraycopy(a, 0, elementData, size, numNew); size += numNew; return numNew != 0; } //将Collection c中的数据插入到ArrayList的指定位置 public boolean addAll(int index, Collection<? extends E> c) { rangeCheckForAdd(index); Object[] a = c.toArray(); int numNew = a.length; ensureCapacityInternal(size + numNew); // Increments modCount int numMoved = size - index; if (numMoved > 0) System.arraycopy(elementData, index, elementData, index + numNew, numMoved); System.arraycopy(a, 0, elementData, index, numNew); size += numNew; return numNew != 0; }
参数说明:从指定源数组中(参数1)复制一个数组,复制从指定的位置开始(参数2),到目标数组(参数3),复制到目标数组的开始位置(参数4),要复制长度(参数5)
实例代码:
1 package cn.itcast.listadd; 2 3 import java.util.ArrayList; 4 5 public class ListAddDemo { 6 public static void main(String[] args) { 7 ArrayList list1 = new ArrayList(); 8 ArrayList list2 = new ArrayList(); 9 list2.add("list2_1"); 10 list2.add("list2_2"); 11 list2.add("list2_3"); 12 13 list1.add("list1_1"); 14 list1.add("list1_2"); 15 list1.add("list1_3"); 16 list1.add(list2);//打印输出 [list1_1, list1_2, list1_3, [list2_1, list2_2, list2_3]] 17 //List.add() 加List 实例,它会把这个看一个实例,而不是把那个看成一个容器。 18 19 //list1.addAll(list2);//打印输出 [list1_1, list1_2, list1_3, list2_1, list2_2, list2_3] 20 //List.addAll()方法,就是规定了,自己的这个List 就是容器,往里面增加的List 实例,增加到里面后,都会被看成对象。 21 //因此,当需要把多个List 实例放到一起的时候,必须使用List.addAll()方法。 22 System.out.println(list1); 23 } 24 }
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4636149.html,如需转载请自行联系原作者