精华内容
下载资源
问答
  • Java中的字符替换

    2021-03-05 21:17:02
    (前记:纯属基础知识总结)在JDK的String类中,提供了replace、relaceAll、replaceFirst三个方法用于字符替换,其中replaceFirst通过字面理解就是替换匹配的第一个字符;而replace、relaceAll都是全部替换的意思那这...

    (前记:纯属基础知识总结)

    在JDK的String类中,提供了replace、relaceAll、replaceFirst三个方法用于字符替换,其中replaceFirst通过字面理解就是替换匹配的第一个字符;而replace、relaceAll都是全部替换的意思

    那这三个有什么本质上的区别呢??

    下面看一个例子,需要将字符串"orange.peach.banana.tomato"中的所有"."替换为"|",

    package com.yf.str;

    public class ReplaceStr {

    public static void main(String[] args) {

    String str="orange.peach.banana.tomato";

    System.out.println(str.replace(".", "|"));

    System.out.println(str.replaceAll(".", "|"));

    System.out.println(str.replaceFirst(".", "|"));

    }

    }输出结果如下

    orange|peach|banana|tomato

    ||||||||||||||||||||||||||

    |range.peach.banana.tomato从结果可以看出,第一个是我们想要的结果,而后面两个都不是我们预期的答案,这是为什么呢??

    看看String类中源码实现:

    首先看看replace的实现(已经通过注释解答逻辑)

    public String replace(char oldChar, char newChar) {

    if (oldChar != newChar) {

    int len = count;

    int i = -1;

    char[] val = value; /* avoid getfield opcode */

    int off = offset; /* avoid getfield opcode */

    //找到第一个需要替换字符的位置

    while (++i < len) {

    if (val[off + i] == oldChar) {

    break;

    }

    }

    //将第一个需要替换的字符前面部分拷贝出来

    if (i < len) {

    char buf[] = new char[len];

    for (int j = 0 ; j < i ; j++) {

    buf[j] = val[off+j];

    }

    //从第一个需要替换的字符开始,替换后面所有的字符

    while (i < len) {

    char c = val[off + i];

    buf[i] = (c == oldChar) ? newChar : c;

    i++;

    }

    //返回新的字符串

    return new String(0, len, buf);

    }

    }

    return this;

    }

    很明显,replace直接就是要字符匹配,相当于匹配ASSIC码,它遍历字符数组中的每一个元素,判断字符是否与'.'相等,如果相等则替换,所以它能将字符串里面所有的"."全部替换为"|"。

    再看看replaceAll的逻辑

    public String replaceAll(String regex, String replacement) {

    //解析正则表达式,然后替换匹配的正则

    return Pattern.compile(regex).matcher(this).replaceAll(replacement);

    }

    replaceAll与replace本质区别在于其是用正则的方式匹配,它传入的是一个正则表达式,而在正则表达式中"."表示的任意字符,所以上面调用

    replaceAll后会将所有字符都替换为"|"。那么很容易推测出replaceFirst也是通过正则匹配,而实际上它也确实这么做的

    public String replaceFirst(String regex, String replacement) {

    return Pattern.compile(regex).matcher(this).replaceFirst(replacement);

    }那么上面的代码的正确方式是将replaceAll、replaceFirst的输入转义,转为真正的"."

    String str="orange.peach.banana.tomato";

    System.out.println(str.replace(".", "|"));

    System.out.println(str.replaceAll("\\.", "|"));

    System.out.println(str.replaceFirst("\\.", "|"));输出结果如下:

    orange|peach|banana|tomato

    orange|peach|banana|tomato

    orange|peach.banana.tomato

    需要注意一下String.split(String regex)、

    String.matches(String regex)等都是通过正则匹配来做判断的(只有replace通过判断字符是否相等)

    展开全文
  • 将字符串中的字符替换成指定字符c

    千次阅读 2021-05-19 08:52:58
    #include#include#include//把source字符串里所有s1字符全部替换字符s2void replace_char(char *result, char *source, char s1, char s2){int i = 0;char *q = NULL;q = source;for(i=0; i{if(q[i] == s1){q[i] =...

    #include

    #include

    #include

    //把source字符串里所有s1字符全部替换成字符s2void replace_char(char *result, char *source, char s1, char s2)

    {

    int i = 0;

    char *q = NULL;

    q = source;

    for(i=0; i

    {

    if(q[i] == s1)

    {

    q[i] = s2;

    }

    }

    strcpy(result, q);

    }

    void replace_string(char *result, char *source, char* s1, char *s2)

    {

    char *q=NULL;

    char *p=NULL;

    p=source;

    while((q=strstr(p, s1))!=NULL)

    {

    strncpy(result, p, q-p);

    result[q-p]= '\0';//very important, must attention!

    strcat(result, s2);

    strcat(result, q+strlen(s1));

    strcpy(p,result);

    }

    strcpy(result, p);

    }

    void main()

    {

    char url[64] = "ad12 fdf5 d12f dfd12 dfp";

    char result[64] = {0};

    replace_char(result, url, ' ', '_' );//把url里所有‘ ’字符替换成'_'字符,结果存在result中

    printf("char final result=%s\n",result);

    memset(result, 0, sizeof(result));

    replace_string(result, url, "12", "@@@");//把url里所有“12”字符串替换成“@@@”字符串

    printf("string final result=%s\n", result);

    }

    分别单独运行的结果如下:

    测试结果:char final result=ad12_fdf5_d12f_dfd12_dfp

    测试结果:string:final result=ad@@@ fdf5 d@@@f dfd@@@ dfp

    展开全文
  • 字符替换C++

    2021-08-03 15:10:28
    把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入 只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串,字符串长度小于等于1000个字符,且不含空格等空白...

    题目描述
    把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。

    输入
    只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。字符串是待替换的字符串,字符串长度小于等于1000个字符,且不含空格等空白符;

    接下来一个字符为需要被替换的特定字符(区分大小写);

    接下来一个字符为用于替换的给定字符。

    输出
    一行,即替换后的字符串。

    样例输入
    hello-how-are-you o O
    样例输出
    hellO-hOw-are-yOu
    代码

    #include<bits/stdc++.h> 
    using namespace std;
    int main()
    {
    	string a;
    	char b,c;
    	cin>>a;
    	cin>>b;
    	cin>>c;
    	int len=a.size();
    	for(int i=0;i<=len;i++)
    	{
    		if(a[i]==b)a[i]=c;
    		
    	}
    	for(int j=0;j<len;j++)
    	{
    	cout<<a[j];
    	}
    		return 0;
    } 
    
    
    展开全文
  • 本文实例讲述了C++实现将一个字符串中的字符替换成另一个字符串的方法,分享给大家供大家参考。具体方法如下:题目要求:原地实现字符串中的每个空格替换成"%20",例如输入"We are happy", 输出"We%20are%20happy...

    本文实例讲述了C++实现将一个字符串中的字符替换成另一个字符串的方法,分享给大家供大家参考。具体方法如下:

    题目要求:

    原地实现字符串中的每个空格替换成"%20",例如输入"We are happy", 输出"We%20are%20happy"

    被替换的字符串当然不仅仅是空格,上面只是个例子

    这是道很好的题目,也是百度面试中的一道题,题目不难,但是问题得考虑全面。这里给出如下实现代码:

    #include

    #include

    #include

    using namespace std;

    int findNumberFirst(const char *str, const char *dest, vector& pvec)

    {

    if (str == NULL || dest == NULL)

    return 0;

    int pos = 0;

    int lenStr = strlen(str);

    int lenDest = strlen(dest);

    if (lenStr < lenDest)

    return 0;

    int count = 0;

    while (pos <= lenStr - lenDest)

    {

    if (strncmp(str + pos, dest, strlen(dest)) == 0)

    {

    pvec.push_back(pos);

    pos += lenDest;

    count++;

    }

    else

    {

    pos++;

    }

    }

    return count;

    }

    int findNumberLast(const char *str, const char *dest, vector &pvec)

    {

    if (str == NULL || dest == NULL)

    return 0;

    int strLen = strlen(str);

    int destLen = strlen(dest);

    if (strLen < destLen)

    return 0;

    int pos = 0;

    while (pos <= strLen - destLen)

    {

    if (strncmp(str + pos, dest, strlen(dest)) == 0)

    {

    pos += destLen;

    pvec.push_back(pos - 1);

    }

    else

    {

    pos++;

    }

    }

    return pvec.size();

    }

    void replaceArray(char *str, const char *src, const char *dest)

    {

    if (str == NULL || src == NULL || dest == NULL)

    return;

    vector pvec;

    int strLen = strlen(str);

    int srcLen = strlen(src);

    int destLen = strlen(dest);

    if (strLen < srcLen)

    return;

    int posBefore = 0;

    int posAfter = 0;

    if (srcLen < destLen)

    {

    int count = findNumberLast(str, src, pvec);

    if (count <= 0)

    return;

    posAfter = strLen + count * (destLen - srcLen) - 1;

    posBefore = strLen - 1;

    while (count > 0 && posBefore >= 0)

    {

    if (pvec[count - 1] == posBefore)

    {

    posAfter -= destLen;

    strncpy(str + posAfter + 1, dest, strlen(dest));

    count--;

    posBefore--;

    }

    else

    {

    str[posAfter--] = str[posBefore--];

    }

    }

    }

    else if (strLen > destLen)

    {

    int count = findNumberFirst(str, src, pvec);

    if (count <= 0)

    return;

    posAfter = 0;

    posBefore = 0;

    int i = 0;

    while (count >= 0 && posBefore < strLen)

    {

    if (count > 0 && pvec[i] == posBefore)

    {

    strncpy(str + posAfter, dest, strlen(dest));

    posAfter += destLen;

    count--;

    posBefore += srcLen;

    i++;

    }

    else

    {

    str[posAfter++] = str[posBefore++];

    }

    }

    str[posAfter] = '\0';

    }

    }

    void main()

    {

    char *str = new char[100];

    if (str == NULL)

    return;

    memset(str, '\0', 100);

    const char *src = " ";

    const char *dest = "%20";

    //case1: 只有1个空格

    strcpy(str, " ");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case2: 两个空格

    strcpy(str, " ");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case3: 正常情况

    strcpy(str, "we are happy");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case3: 空格在前

    strcpy(str, " we are happy");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case4: 空格在后

    strcpy(str, "we are happy ");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case4: 没空格

    strcpy(str, "wearehappy");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    //case5: 两边一样

    strcpy(str, "we are happy");

    replaceArray(str, src, dest);

    cout << "str: " << str << endl;

    src = "%20";

    assert(dest == "%20");

    replaceArray(str, dest, src);

    cout << "str: " << str << endl;

    }

    分析上述代码,很有意思的一个情况是srcLen和destLen或大或小的情形,其边界条件的判定不一样。比如we are happy为例子,从后往前拷贝时,count=2。

    在count=0时,恰好将最前面的空格替换完成,we则不用重复拷贝。但是对于从前往后拷贝,当count=0时,最后面的happy将不会被拷贝。

    希望本文所述实例对大家C++程序算法设计的学习有所帮助。

    展开全文
  • Java特殊字符替换

    2021-03-14 16:48:25
    public class Mime {public static void main(String[] args) throws MessagingException,IOException {InputStream stringStream = new FileInputStream("mime");InputStream output = MimeUtility.decode(stringSt...
  • C语言 将字符串中指定的一个字符替换为其他字符或字符串
  • I have string which contains alpahanumeric and special character.I need to replace each and every special char with some string.For eg,Input string = "ja*va st&ri%n@&"Expected o/p = "jaasteris...
  • php将字符串中连续的某个字符替换为一个php将字符串中连续的某个字符替换为一个。/*** php将字符串中连续的某个字符替换为一个* @param string $search* @param string $replace* @param string $subject* @return ...
  • create table A_TEST(PAYOUT_ITEM_CODE VARCHAR2(30) not null,FORMULA_DET VARCHAR2(1000))create table B_TEST(ELEMENT_ID VARCHAR2(5) not null,NAME VARCHAR2(41))FORMULA_DET列里ELEMENT_ID替换成NAME测试数据...
  • 如果你在替换数据库的指定字符串或字符,我们需要利用sql字符替换,但是对于超大容量的数据替换我们可能要用到sql存储过程替换 物,因为存储过程效率高于我们自己写的替换函数哦。如果你在替换的指定字符串或字符,...
  • /*功能:将str字符串中的oldstr字符替换为newstr字符串*参数:str:操作目标oldstr:被替换者newstr:替换者*返回值:返回替换之后的字符串*版本:V0.2*/char*strrpc(char*str,char*oldstr,char*newstr){char bstr...
  • 在mysql中替换字符中的内容我们使用了replace就可以实现,如下实例。代码如下mysql> update `table_name` set field = replace(field,'.rar','.7z');table_name:要查询的表名,field:表里的字段名,replace...
  • 默认匹配除\n之外的任意一个字符,一个点代表一个字符,指定flag DOTA L L则匹配任意字符,包括换行^ 匹配字符串开头,若指定flag MULTILINE忽略换行符,也可匹配上(r'^a','\nabc\ndef') re.starch('^a','abcd')等效...
  • replace(被替换字符串, 要替换为的字符串); //将'fang-ming-ouyangshuai'变成'fang**M**ing**O**uyangshuai' varstr='fang-ming-ouyangshuai' //arr1需要改变的字符串num需要被替换字符num1替换后的字符 ...
  • 3285 字符替换

    2021-11-20 15:40:39
    3285 字符替换 1.0 秒 131,072.0 KB 40 分 初学者3级题 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 收起 输入 只有一行,由一个字符串和两个字符组成,中间用单个空格隔开...
  • 因为replace方法内部是使用正则表达式的lz可以看看下面这段代码public Matcher appendReplacement(StringBuffer sb, String replacement) {// If no match, return errorif (first < 0)throw new ...
  • //将字符串20140331,20131231,20130930,20130630,20130331,,替换成201403,201312,201309,201306,201303,,因为“,”是特殊字符需要用"\\,",来替换“,”String tt="20140331,20131231,20130930,20130630,20130331,...
  • C/C++编程学习 - 第18周 ② 字符替换

    千次阅读 2021-02-01 09:44:41
    把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入格式 只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。 字符串是待替换的字符串,字符串长度小于等于 30 个字符,且不含空格...
  • 先给出结论:要替换字符数量不多时,可以直接链式replace()方法进行替换,效率非常高;如果要替换字符数量较多,则推荐在 for 循环中调用replace()进行替换。可行的方法:1. 链式replace()string.replace()....
  • 力扣字符替换

    2021-03-03 11:46:53
    #java剑指offer# 字符替换 建立一个新的char [] arry,length可能会变。 String s,s.charAt[i] 开辟新的String,String newStr = new String(arry,0,size); c语言字符串最后一位’\n’
  • 先给出结论:要替换字符数量不多时,可以直接链式replace()方法进行替换,效率非常高;如果要替换字符数量较多,则推荐在 for 循环中调用replace()进行替换。可行的方法:1. 链式replace()string.replace()....
  • java字符替换,在java中进行字符替换我们也可以用到replace函数,下面来看看三个实例的方法. public class MainClass{public static void main( String args[] ){String s1 = new String( "hello" );String s2 = new...
  • * 中文字符串中间部分替换(最多替换二分之一) * @param string $username 中文字符串 * @return string 处理后的字符串 */ function ceshi($username){ // 计算字符串长度,无论汉字还是英文字符全部为1 $length...
  • 我正在编写一个将二进制数字转换成相应的单词值的代码.例如,我输入“ 3”,代码会将数字转换为“ 11”,这是“ 3”的二进制表示形式.代码将继续将“ 11”转换为“一个”,然后将其输出.我已经写了二进制转换部分,但是很...
  • 字符替换

    2021-07-23 22:47:55
    把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串。 输入格式 只有一行,由一个字符串和两个字符组成,中间用单个空格隔开。 字符串是待替换的字符串,字符串长度小于等于3030个字符,且不含...
  • Sqlserver 特殊字符替换

    2021-06-07 16:59:05
    记录Sqlserver中字符串中有特殊字符,直接替换空格替换不了的问题,希望对你有用。 ASCII码大全 地址1:传送门 地址2:传送门 解决方案 我是直接执行下面的前四句,单个执行替换没有成功。 --tab 9 回车13 换行10 ...
  • oldDom= "哈哈哈[开心]nr是的呢"//注意 必须新创建一个变量进行分割//先把字符串中的n换行 替换成const newDom = oldDom.replace(/n/g,"");//下面就开始匹配字符串中 换行 和 [.*]表情let newDom2 = newDom.split(/...
  • //// StrReplace.java//...http://www.gaodaima.com/41545.htmljsP中的字符替换函数str_replace()实现import java.util.*;/*** Title:* Description:* Copyright: Copyright (c) 2001* Company:* @author* @version...
  • 7-3 将字符串中数字字符替换成# (15分) 函数fun的功能是将字符串中每一个数字字符都替换成一个#字符。 函数接口定义: void fun(char *s); 其中 s 是用户传入的参数。函数将指针 s所指的字符串中每一个数字字符都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,114,990
精华内容 445,996
关键字:

字符替换