JAVA 中的 replace replaceAll

问题:

测试code

System.out.println("1234567890abcdef -----> "+"1234567890abcdef".replace("12345", "ABCDE"));
  System.out.println("1234567890abcdef -----> "+"1234567890abcdef".replaceAll("12345", "ABCDE"));
  System.out.println("!@#$%^&*()-=Abcd -----> "+"!@#$%^&*()-=Abcd".replace("#$%^&", "OK"));
  System.out.println("!@#$%^&*()-=Abcd -----> "+"!@#$%^&*()-=Abcd".replaceAll("#$%^&", "OK"));
执行结果:

1234567890abcdef -----> ABCDE67890abcdef       Replace 将目标代码成功替换
1234567890abcdef -----> ABCDE67890abcdef       ReplaceAll 也将目标代码成功替换
!@#$%^&*()-=Abcd -----> !@OK*()-=Abcd               Replace 将目标代码成功替换
!@#$%^&*()-=Abcd -----> !@#$%^&*()-=Abcd         ReplaceAll  目标代码替换 失败

可以明显发现,String.ReplaceAll 在对特殊字符的替换上与String.Replace 存在一定的差异。

定义:
replace

public String replace(CharSequence target, CharSequence replacement)

使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 "b" 替换字符串 "aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。
参数:

target - 要被替换的 char 值序列

replacement - char 值的替换序列

返回:
所得 String
抛出:

NullPointerException

- 如果 target 或 replacement 为 null。

replaceAll

public String replaceAll(String regex, String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:

Pattern.compile(

regex).matcher(str).replaceAll(repl)

注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String)

取消这些字符的特殊含义。

参数:

regex - 用来匹配此字符串的正则表达式

replacement - 用来替换每个匹配项的字符串

返回:
所得 String
抛出:

PatternSyntaxException - 如果正则表达式的语法无效

可以发现String.Replace 主要是针对字符串的替换,String.ReplaceAll 主要是用正则表达式的子字符串进行替换。所以对在使用String.ReplaceAll 时,不能和String.Replace 方法一起使用。

可以String.ReplaceAll (Pattern.quote("str1"),"str2");

即:
  System.out.println("1234567890abcdef -----> "+"1234567890abcdef".replace("12345", "ABCDE"));
  System.out.println("1234567890abcdef -----> "+"1234567890abcdef".replaceAll("12345", "ABCDE"));
  System.out.println("!@#$%^&*()-=Abcd -----> "+"!@#$%^&*()-=Abcd".replace("#$%^&", "OK"));
  System.out.println("!@#$%^&*()-=Abcd -----> "+"!@#$%^&*()-=Abcd".replaceAll(Pattern.quote("#$%^&"), "OK"));

JAVASCRIPT 中的 replace 不提供 replaceAll

stringObj.replace(rgExp, replaceText)
   
   参数  
stringObj     
   必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。 
rgExp 
   必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式。 
replaceText 
   必选项。是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中,replaceText 参数也可以是返回替换文本的函数。
   
   说明 
replace 方法的结果是一个完成了指定替换的 stringObj 对象的复制。 
    
下面任意的匹配变量都能用来识别最新的匹配以及找出匹配的字符串。在需要动态决定替换字符串的文本替换中可以使用匹配变量。
   
   字符 含义
   $$ $ (JScript 5.5 或更新版本)
   $& 指定与整个模式匹配的 stringObj 的部分。 (JScript 5.5 或更新版本)
   $` 指定由 $& 描述的匹配之前的 stringObj 部分。 (JScript 5.5 或更新版本)
   $' 指定由 $& 描述的匹配之后的 stringObj 部分。 (JScript 5.5 或更新版本)
   $n 捕获的第 n 个子匹配,此处 n 为从1到9的十进制一位数。 (JScript 5.5 或更新版本)
   $nn 捕获的第 nn 个子匹配,此处 nn 为从01到99的十进制两位数。 (JScript 5.5 或更新版本) 
    
  
如果 replaceText 为函数,对于每一个匹配的子字符串,调用该函数时带有下面的 m+3 个参数,此处 m 是在 rgExp
中捕获的左括弧的个数。第一个参数是匹配的子字符串。接下来的 m 个参数是查找中捕获的全部结果。第 m+2 个参数是在 stringObj
中匹配出现的偏移量,而第 m+3 个参数为 stringObj。结果为将每一匹配的子字符串替换为函数调用的相应返回值的字符串值。
   
   Replace 方法更新全局 RegExp 对象的属性。
   
   示例
   下面的示例演示了 replace 方法将第一次出现的单词 "The" 替换为单词 "A" 的用法。
   
   function ReplaceDemo(){
    var r, re; // 声明变量。
    var ss = "The man hit the ball with the bat.n";
    ss += "while the fielder caught the ball with the glove.";
    re = /The/g; // 创建正则表达式模式。
    r = ss.replace(re, "A"); // 用 "A" 替换 "The"。
    return(r); // 返回替换后的字符串。
   } 
得到结果:A man hit the ball with the bat.nwhile the fielder caught the ball with the glove.
   另外, replace 方法也可以替换模式中的子表达式。 下面的范例演示了交换字符串中的每一对单词:
   
   function ReplaceDemo(){
    var r, re; // 声明变量。
    var ss = "The rain in Spain falls mainly in the plain.";
    re = /(\S+)(\s+)(\S+)/g; // 创建正则表达式模式。
    r = ss.replace(re, "$3$2$1"); // 交换每一对单词。
    return(r); // 返回结果字符串。
   }
得到结果:rain The Spain in mainly falls the in plain.
  
下面的示例(在 JScript 5.5 及更新版本中执行)执行的是从华氏到摄氏的转换,它演示了使用函数作为
replaceText。要想知道该函数是如何工作的,传递一个包含数值的字符串,数值后要紧跟 "F" (例如 "Water boils at
212")。 
var s = "Water freezes at 32F and boils at 212F."
    var test = /(d+(.d*)?)Fb/g; // 初始化模式。
    return(s.replace
    (test,
    function($0,$1,$2) {
    return((($1-32) * 5/9) + "C");
    }
    )
    );   
得到结果:Water freezes at 0C and boils at 100C.
js居然不提供replaceAll方法,用for循环又有效率问题,给你一个正则表达式的解决方案

js 代码
String.prototype.replaceAll  = function(s1,s2){   
return this.replace(new RegExp(s1,"gm"),s2);   

方法: string.replace(new RegExp(oldString,"gm"),newString))

gm     g=global, m=multiLine  ,  大致上方法就是这样的,可以实现替换全部指定字串

另一个简单的验证JS的方法:

在浏览器地址栏输入
javascript:alert("abcabcabc".replace(new RegExp("a","gm"),"ad"))

这样比较省事 ;)     ,不知道多行的会不会很方便

orgStr.replace(new RegExp(findStr, 'g'), replaceStr)
应该就可以替换所有的了
如果不用正则表达式
orgStr.replace(findStr, replaceStr)只能替换第一个

  & 替代<,>,",',&

  */

  function toTxt(str){

  var RexStr = /\<|\>|\"|\'|\&/g

  str = str.replace(RexStr,

  function(MatchStr){

  switch(MatchStr){

  case "<":

  return "& lt;";

  break;

  case ">":

  return "& gt;";

  break;

  case "\"":

  return "& quot;";

  break;

  case "'":

  return "& #39;";

  break;

  case "&":

  return "& amp;";

  break;

  default :

  break;

  }

  }

  )

  return str;

  }

[转]String.Replace 和 String.ReplaceAll 的区别的更多相关文章

  1. JAVA中string.replace()和string.replaceAll()的区别及用法

    乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样.    public String r ...

  2. String.replace与String.format

    字符串的替换函数replace平常使用的频率非常高,format函数通常用来填补占位符.下面简单总结一下这两个函数的用法. 一.String.replace的两种用法 replace的用法如:repl ...

  3. Java基础知识强化35:String类之String的其他功能

    1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...

  4. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  5. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

  6. java中replace和replaceAll的区别

    replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是: 1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharS ...

  7. JAVA中REPLACE和REPLACEALL的区别(转)

    replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:  1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(Char ...

  8. String、StringBuffer和StringBuild的区别

    public class Test1 { public static void stringReplace (String text) { text = text.replace('j','i') ; ...

  9. [LeetCode] Find And Replace in String 在字符串中查找和替换

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

随机推荐

  1. Msql中的触发器

    解发器 当执行某种操作时解发的行为. 比如, 当表变动时触发的动作. 像商城订单, 当下单时, 库存减少. 语法: create trigger trigger_name after/befor in ...

  2. elk系列5之syslog的模块使用【转】

    preface rsyslog是CentOs系统自带的的一个日志工具,那么我们就配置logstash来接受rsyslog的日志. logstash的syslog模块 linux-node2上操作log ...

  3. VI编辑,配置文件

    1,VI编辑 vi 分为3种模式 1>一般模式: [Ctrl + f  ]         下一页 [Ctrl + b ]         上一页 [n+ enter]  向下移动n行 eg:2 ...

  4. java基础7 封装

    面向对象的三大特征: 1.封装   (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承   ...

  5. js学习笔记1:语法、数据类型与转换、运算符与运算

    注意: 上部代码错误,将停止运行,下部的代码无法显示            typeof 用来定义内容类型,不会输出内容只会输出类型 一.js输出语法         1. 弹窗输出('')内的内容: ...

  6. git团队开发

    用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...

  7. Deepin 2015 安装惠普打印机驱动

    参考:https://bbs.deepin.org/forum.php?mod=viewthread&tid=34749&extra= 1.安装新立得包管理器:sudo apt-get ...

  8. Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题

    http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...

  9. 基于Ubuntu系统搭建以太坊go-ethereum源码的开发环境

    第一.先安装geth的CLI环境sudo apt-get install geth,这个很重要 第二.下载源代码 git clone https://github.com/ethereum/go-et ...

  10. php实现var_dump函数

    <?php class VarDump { private static $isInLoop = false; private static $buffer = false; public st ...