【java解惑】java字符串替换方法使用

    如下代码:

public class Example020 {

	public static void main(String[] args) {
		String separator = File.separator;
		String clazzName = Example020.class.getName();
		String rs1 = clazzName.replace(".", separator); // 方法1
		String rs2 = clazzName.replaceAll("\\.", "\\\\");// 方法2
		String rs3 = clazzName.replaceAll(Pattern.quote("."),
				Matcher.quoteReplacement(separator));// 方法3
		System.out.println("class name =" + clazzName);
		System.out.println("rs1=" + rs1);
		System.out.println("rs2=" + rs2);
		System.out.println("rs3=" + rs3);

	}
}

    分析说明:

    上述代码是java字符串替换的三种方法。Java从1.5版本后提供了两种字符串替换方法:replace和replaceAll。这两个方法的功能相同,都能够替换字符串所有需要替换的字符(虽然命名很具有迷惑性)。不同的是,replace方法传入的参数是要被替换的字符和替换后的字符;replaceAll传入的是要被替换的字符和替换后字符的正则表示。

  • 方法1中,传入要被替换的"."和替换后的文件分隔符(不同系统不同);
  • 方法2中,由于"."在正则表达式中表示任何字符,如果直接传入".",则被操作字符串的所有内容都会被替换,所以这里需要加入转义,也就是"\\."。第一个\表示转义,而\本身又是特殊字符需要被转义,所以需要再次转义,所以是两个\。替换后字符传入的是"\\\\",\本身是windows文件路径分隔符,但是传入时需要转义,保证传入的是路径分隔符而不是转义符,所以传入的字符就需要2个\,加上字符串表示(表明传入的不是转义字符)需要2个\,共需要使用4个\来表达一个文件分隔符。如果这里传入的是两个\,在windows执行将会出现错误,而且这个错误的提示并不友好,导致很多时候完全无法定位错误缘由。值得注意的是,在linux下,这里就不需要这么麻烦,可以直接传入文件分隔符/即可。
//使用replaceAll,第二个参数传入"\\"的不友好错误提示
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:658)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:762)
	at java.util.regex.Matcher.replaceAll(Matcher.java:906)
	at java.lang.String.replaceAll(String.java:2162)
	at cn.itape.java.disabuse.Example020.main(Example020.java:13)
  • 方法3中,从1.5以后,java提供了两个的方法,将字符串直接转化正则表达式形式,直接使用即可,避免了方法2中需要自己加入转义,减少错误发生的可能性。


(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)

源代码地址:https://github.com/rocwinger/java-disabuse


时间: 2024-10-26 10:24:32

【java解惑】java字符串替换方法使用的相关文章

[Java] - 格式字符串替换方法

Java 字符串格式替换方法有两种,一种是使用String.format(...),另一种是使用MessageFormat.format(...) 如下: import java.text.MessageFormat; public class Test { public static void main(String[] args) { String strTemp = "11111%s22222%s%%s33333"; String str = String.format(strT

【java解惑】字符串的字节数组构造函数使用

如下代码: public class Example018 { public static void main(String[] args) { byte bs[] = new byte[256]; for (int i = 0; i < 256; i++) { bs[i] = (byte) i; } string(bs);// 调用1 string(bs, "iso-8859-1");// 调用2 string(bs, "gbk");// 调用3 strin

java生成json字符串的方法

例1:将map对象添加一次元素(包括字符串对.数组),转换成json对象一次. 代码: package com.json; //这是使用org.json的程序: import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; public class jsontest { public static void main(String[] args)

java反射机制——字符串拼接方法名调用方法

1 public class Person { 2 public String getPerson1(String i){ 3 return "Person1--"+i; 4 5 } 6 public String getPerson2(String i){ 7 return "Person2--"+i; 8 9 } 10 public String getPerson3(String i){ 11 return "Person3--"+i; 1

js的字符串替换方法String.format

简单的一个string.format的方法去替换字符串 String.format = function () { if (arguments.length == 0) return null; var str = arguments[0]; for (var i = 1; i < arguments.length; i++) { var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm'); str = str.replace(re, arguments

【java解惑】java字符串比较那些事儿

    如下代码: public class Example013 { public static void main(String[] args) { final String pig = "length:8"; final String pig1 = "length:8"; int length = pig.length(); final String dog = "length:" + pig.length(); System.out.pr

Java字符串替换忽略大小写

今天在做字符串替换时忽略大小写,网上找到了一个非常简便的方法,使用String的replaceAll方法. java.lang.String.replaceAll(String regex, String replacement) 第一个参数是正则表达式,可以使用(?i)来忽略字符串大小写.例子如下: 1 String aa = "LaalAAPpsadfasdfasdf"; 2 String pattern = "(?i)laa"; 3 aa = aa.repla

java string 字符串替换

i.replace方法 该方法的作用是替换字符串中所有指定的字符,然后生成一个新的字符串.经过该方法调用以后,原来的字符串不发生改变.例如:      String s = "abcat":      String s1 = s.replace('a','1'): 该代码的作用是将字符串s中所有的字符a替换成字符1,生成的新字符串s1的值是"1bc1t",而字符串s的内容不发生改变. 如果需要将字符串中某个指定的字符串替换为其它字符串,则可以使用replaceAll

java中String字符串的替换函数:replace与replaceAll的区别

例如有如下x的字符串 String x = "[kllkklk\\kk\\kllkk]";要将里面的“kk”替换为++,可以使用两种方法得到相同的结果 replace(CharSequence target, CharSequence replacement)       ——          x.replace("kk", "++") replaceAll(String regex, String replacement)       ——