实例分析字符串的替换操作 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 实例分析字符串的替换操作

实例分析字符串的替换操作

更新时间:2020-10-30 17:34:56 来源:极悦 浏览1211次

字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,同样也是可以替换的。本文我们就来讲一讲字符串替换操作。


一般情况下,字符串替换分为以下三种情况:

1.字符替换,不常用

public String replace(char oldChar,char newChar)

2.全部替换

public String replaceAll(String regex,String s)

3.替换首个

public String replaceFirst(String regex,String s)


下面是一个涵盖着三个替换方式的简单例子:

package com.shxt.demo01;

public class StringDemo11 {

public static void main(String[] args) {

String str = "pangpang" ;

System.out.println(str.replace('n','X'));

System.out.println(str.replaceAll("an","*"));

System.out.println(str.replaceFirst("an","#"));

}

}

/**

运行结果

paXgpaXg

p*gp*g

p#gpang

*/

请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。

给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。

测试样例:"A%sC%sE",7,['B','D','F']

返回:"ABCDEF"


方法一:特殊函数替换法

解析:定义pos在原字符串A中查找“%s”子串,从而获得“%s”的初始位置。然后替换“%s”,即定义一个下标i,并初始化为0,再定义一个字符串接收arg中替换的字符,然后遍历原字符串A,当其元素为“%s”时,将arg中元素赋值给字符串s,再利用replace函数将原字符串中的“%s”替换成s中的元素。最后判断参数列表的字符数是否大于占位符个数,如果是则将剩下的参数字符添加到字符串的末尾。由此得到替换后的字符串。

代码:

//string::npos参数:pos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西。取值由实现决定,一般是-1,这样做,就不会存在移植的问题了。

//find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系,那么返回值就一定是npos。所以不难想到用if判断语句来实现!

string formatString(string A, int n, vectorarg, int m)

{

int pos = A.find("%s");//在A中查找“%s"串

int i = 0;

string s;

while(pos != string::npos)

{

s = arg[i++];

A.replace(pos,2,s,0,1);//替换

pos = A.find("%s");

}

while(i < m)

{

A += arg[i++];

}

return A;

}


方法二:特殊函数删除法

解析:先定义一个变量k,初始化为0,表示arg替换时的下标,然后遍历原字符串A,替换“%s”,即判断元素是否为‘%’并且下个元素为‘s’,如果是,arg中的某个元素替换当前元素,再用erase函数删除后一个元素;最后判断变量k是否不等于arg的长度,如果是,则将剩下的字符使用循环语句将其放入在字符串A中;如此可以得到替换后的字符串。

代码:

//erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符

//erase(position);删除position处的一个字符(position是个string类型的迭代器)

//erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

string formatString(string A, int n, vectorarg, int m)

{

int k=0;

for(int i=0;i<n;i++)< p="">

{

if(A[i]=='%'&&A[i+1]=='s')

{

A[i]=arg[k];

k++;

A=A.erase(i+1,1);

}

}

if(k!=m)

{

for(int j=k;j<m;j++)< p="">

A=A+arg[j];

}

return A;

}


方法三:特殊函数复制法

解析:先遍历原字符串A,将其‘%s’替换,即定义一个变量找到‘%’的位置,然后用substr复制函数将‘%’位置前的字符复制到新的字符res中,再将‘%s’替换的arg中的元素写入新地字符串res中,此时用substr函数将A的字符串变为‘%s’之后的部分,如此反复替换完‘%s’;接着将新的字符串res与A相加得到字符串res;最后用遍历的方式将arg中剩余的元素写入res末尾,由此得到最终所求解的字符串。

代码如下:

string formatString(string A, int n, vectorarg, int m)

{

string res;

int count = 0;

while(A.find('%') != -1)

{

int index = A.find('%');

string a = A.substr(0,index);

res = res + a;

res = res + arg[count++];

A = A.substr(index+2,A.size());

}

res = res + A;

for(int i = count; i < m; i++)

{

res = res + arg[i];

}

return res;

}


以上就是3种字符串替换方式和具体的操作过程,字符串主要用于编程,概念说明、函数解释等,在Java编程中也扮演着一个不容忽视的角色。我们也不容小觑字符串的作用。观看本站的Java基础教程,打下Java编程的基础,才能真正意义上学好Java!


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>