更新时间: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, vector
{
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, vector
{
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, vector
{
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!
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习