replace的源码_编程replace

hacker|
136

文章目录:

谁能给出库函数replace()的源代码啊?

STL里面的?

看algorithm头文件啊,就是一个模板函数,所有函数体全在头文件里面啊

C#中,字符串的replace 是怎么实现的

Replace函数在BCL内部还调用了C++的实现,即这个函数真正的实现仍然不是C#实现的而是C++实现的。这是它用C++实现的源码:

白话解释下这段js代码,关于replace

ch,或者word都可以……

首先我们来了解下基本的语法:string.replace(regexp, replacement)

regexp :您要执行替换操作的正则表达式,如果传入的是一个字符串,那就会当作普通字符来处理,并且只会执行一次替换操作;如果是正则表达式,并且带有 global (g) 修饰符,则会替换所有出现的目标字符,否则,将只执行一次替换操作。

replacement :您要替换成的字符。

返回值是执行替换操作后的字符串。

下面用几个例子来详细的说明下:

1、String.replace( ) 替换所有出现的目标字符

Code:

var text= "javascript 非常强大 !JAVASCRIPT 是我最喜欢的一门语言 !";

text.replace(/javascript/ig, "JavaScript");

// 返回:JavaScript 非常强大 !JavaScript 是我最喜欢的一门语言 !

2、String.replace( ) 实现调换位置

Code:

var name= "aaaa, bbcc";

name.replace(/(\w+)\s*,\s*(\w+)/, "$2 $1");

// 返回:bbcc aaaa

3、String.replace( ) 实现将所有双引号包含的字符替换成中括号包含的字符

Code:

var text = '"JavaScript" 非常强大!';

text.replace(/"([^"]*)"/g, "[$1]");

// 返回:[JavaScript] 非常强大!

4、String.replace( ) 将所有字符首字母大写

Code:

var text = 'a journey of a thousand miles begins with single step.';

text.replace(/\b\w+\b/g, function(word) {

return word.substring(0,1).toUpperCase( ) +

word.substring(1);

});

// 返回:A Journey Of A Thousand Miles Begins With Single Step.

java中,String类对象中的内容一旦被初始化就不能再改变,那么String类中还有replace和toUpperCase方法呢

朋友,你好,对于你的问题,我觉得下面的回答您会满意明了:

String类对象中的内容一旦被初始化就不能再改变 没错的,这是String类的特性,一定要记住。

下面举个例子:

String s = "Hello"; //这时候会在内存中开辟一块空间存储“Hello”,并且S的引用指向它;

s = “world”; //看这句,初学者一般觉得这样的话s的值就变了啊,跟String的特性相违背了啊,其实并不然,s只是对象的引用,真正的对象存在了内存中,执行这句语句的时候,会在内存中重新开辟一块内存,用来存储“world”,并将原来的s引用指向“world”。但是原来的内存中的“hello”并没有改变。也就是说String类对象中的内容一旦被初始化就不能再改变。

希望您会看明白。

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

JAVA中string.replace()和string.replaceAll()的区别及用法乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样。

public String replace(char oldChar,char newChar) 

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。 如 果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,用来表示与此 String 对象表示的字符序列相等的字符序列,除了每个出现的 oldChar 都被一个 newChar 替换之外。 

public String replaceAll(String regex,String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:  

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

参数: 

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

返回:得到的 String  

抛出: PatternSyntaxException - 如果正则表达式的语法无效。

如果我有以下的字符串:

String x= "[kllkklk\\kk\\kllkk]";

要将里面的“kk”替换为++,可以使用两种方法得到相同的结果  

replace(CharSequencetarget, CharSequencereplacement)  ——x.replace("kk", "++")

replaceAll(Stringregex, Stringreplacement)       ——x.replaceAll("kk", "++")

可见两个函数在处理上述字符串的时候没有什么区别,

下面将字符串中的“\\”替换为“++”

  System.out.println(x.replace("\\","++"));   //没有问题

  System.out.println(x.replaceAll("\\","++"));  //报错java.util.regex.PatternSyntaxException

可见,当使用转义字符进行替换的时候,是有区别的。

replaceAll的参数就是regex,是正则表达式。首先会转义,所以报错。

如果使用System.out.println(x.replaceAll("\\\\","++"));即可完成。

那么在使用普通的字符串替换时,选用哪一个函数呢?

String x= "[kllkklk\\kk\\kllkk]";

  String tmp;

  //System.out.println(x.replace("[", "#").replace("]","#"));

  System.out.println(new Date().getTime());

  for(int i =0;i1000000;i++)

   tmp=x.replace("kk", "--");

  System.out.println(new Date().getTime());

  for(int i =0;i1000000;i++)

   tmp=x.replaceAll("kk", "++");

  System.out.println(new Date().getTime());

测试结果:

1312424571937

1312424574531

1312424576671

根据测试replaceAll函数要更快一些。看源码发现,replace函数里面仍使用replaceAll函数。

总体原则:

当字符串无法确定是否具有转义字符时,而且也不需要转义时,建议使用replace函数

否则,使用replaceAll函数

4条大神的评论

  • avatar
    访客 2022-07-12 上午 01:16:17

    包含的字符Code: var text = '"JavaScript" 非常强大!';text.replace(/"([^"]*)"/g, "[$1]");// 返回:[JavaScri

  • avatar
    访客 2022-07-12 上午 03:35:12

    现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样。public String replace(char oldChar,char newChar) 返回一个新的字

  • avatar
    访客 2022-07-12 上午 01:57:04

    text = 'a journey of a thousand miles begins with single step.';text.replace(/\b\w+\b/g, function(word) { re

  • avatar
    访客 2022-07-11 下午 11:30:03

    });// 返回:A Journey Of A Thousand Miles Begins With Single Step.java中,String类对象中的内容一旦被初始化就不能再改变,那么String类

发表评论