如何截取并替换字符串中相同部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何截取并替换字符串中相同部分相关的知识,希望对你有一定的参考价值。

有两个字符串s1、s2。例如,s1="abcccbef"; s2="cccbfg";
找出字符串具有的相同部分(要求字符及连接顺序完全相同)。如“cccb”,
并将该部分替换为某特定字符串。如 "123”。
即最终生成两个字符串。如 "ab123ef" 及 "123fg" 。
要求:可以用任何方法实现,但是必须以函数实现,s1,s2的值以参数形式代入。

string a = textBox1.Text;//字符串1
string b = textBox2.Text;//字符串2
string c=textBox3.Text;//替换的特定字符串
StringBuilder sameStr = new StringBuilder();
int min = a.Length < b.Length ? a.Length : b.Length;
for (int i = 0; i < min; i++)

if (a[i] == b[i])
sameStr.Append(a[i]);

string A = a.Replace(sameStr.ToString(),c);//替换后的字符串1
string B = b.Replace(sameStr.ToString(), c);替换后的字符串2

绝对的正确 !
参考技术A string[] ss = new string[] "abcccbef", "cccbfg" ; //定义字符型数组,将需要替换的字符串以“,”分割封装到数组
string a = "cccb"; //需要替换的字符串
string b = "111"; //替换后的字符串
for (int i = 0; i < ss.Length; i++)

ss[i] = ss[i].Replace(a,b);
参考技术B 循环 参考技术C 你这个问题存在争议,单个字符相同的话是不是也应该算是相同呢 那么上面的问题结果应该是s1="ab123123123123e123" s2="123123123123g"
最好是限制一下字符串的长度

手机号码中间部分替换成星号

今天写的一个页面,里面有个效果,手机号中间4位数字被替换了星号,这个效果挺简单的,实现的方法有多种,既可以是字符串截取也可以用正则 ^_^

要达到的效果如下:

135****2627

JS代码:

方法 ① :字符串截取+拼接

   var phone = ‘13500001111‘;

  phone.substr(0, 3) + ‘****‘ + phone.substr(7, 11);

  

这种方法的原理是先截取字符串的前3位字符,拼接上中间的4个*号,再截取字符串的后4位字符。substring()函数也是可以的哦。

将上面的写成个方法,以后可以复用。

 function formatPhone(phone) {
       return phone.substr(0, 3) + ‘****‘ + phone.substr(7, 11);
  }
           

  

以后需要调用的时候把手机号码传进去就可以了。

注意:phone的类型是字符串哦,怎么你想直接传入数字?那稍微修改下好了。

 function formatPhone(phone) {
            if (typeof phone == ‘number‘) {
                phone = phone.toString();
            }
            return phone.substr(0, 3) + ‘****‘ + phone.substr(7, 11);
        }

  

判断下参数的类型是不是数值型,是的就转换成字符串型,如果你还想严谨点,可以再判断下其他类型,确保是字符串型才执行代码。

有没有觉得方法①比较水呢?那就用正则装装逼吧。

方法 ②:正则表达式替换

 function formatPhone(phone) {
            return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
        }

  

原理是先匹配前3个数字,将匹配到的值给$1,然后匹配中间4个数字,再匹配最后4个数字给$2。

正则不懂的童鞋可以戳这里《正则表达式简单入门》

小结:中间4位替换成*号,为什么不是其他位置呢,首先你要知道手机号的规则,我国使用的手机号码是11位的,前3位是号码段,中间4位是地区编码,最后4位是用户编码。你要替换多少位都没关系,至少让人知道这是个手机号码就可以了,不过替换中间4位,是约定俗成的哦。

PHP:

顺便说说在PHP中怎么替换吧。

 <?php
            $phone = "13511112222";
            $pattern = "/(\d{0,3})\d{4}(\d{4})/";
            $replacement = "\$1****\$2";
            print preg_replace($pattern, $replacement, $phone);
        ?>
                    
        <?php
            $phone = "13264309555";
            echo substr_replace($phone,"****", 3, 4);
        ?>
                    
        <?php
            echo substr($phone, 0, 3)."****".substr($phone, 7, 4);
        ?>

  

                  

Smarty:

 <{‘13511112222‘|regex_replace:"/(\d{0,3})\d{4}(\d{4})/":"\$1****\$2"}>

  

总结:上面列举的方法不仅可以替换手机号,像身份证号、电话号码、IP等,甚至用户名这些都是可以的,只不过正则要有针对的去写咯,这里就不在说了,有时间的话都写个例子出来。

 

原文地址:http://www.mingsixue.com/blog/effect/JS-phone-to-asterisk.html

以上是关于如何截取并替换字符串中相同部分的主要内容,如果未能解决你的问题,请参考以下文章

lua语言如何替换多个字符并记录替换位置和替换内容

golang依次替换字符串中相同的值

UE中如何使用正则替换行中部分字符串

手机号码中间部分替换成星号

vba如何判断字符串里面是包含某个字符?

iOS字符串截取、包含、替换