更新時間:2020-10-30 17:34:56 來源:動力節(jié)點 瀏覽1602次
字符串在存儲上類似字符數(shù)組,所以它每一位的單個元素都是可以提取的,同樣也是可以替換的。本文我們就來講一講字符串替換操作。
一般情況下,字符串替換分為以下三種情況:
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","#"));
}
}
/**
運行結(jié)果
paXgpaXg
p*gp*g
p#gpang
*/
請你實現(xiàn)一個簡單的字符串替換函數(shù)。原串中需要替換的占位符為"%s",請按照參數(shù)列表的順序一一替換占位符。若參數(shù)列表的字符數(shù)大于占位符個數(shù)。則將剩下的參數(shù)字符添加到字符串的結(jié)尾。
給定一個字符串A,同時給定它的長度n及參數(shù)字符數(shù)組arg,請返回替換后的字符串。保證參數(shù)個數(shù)大于等于占位符個數(shù)。保證原串由大小寫英文字母組成,同時長度小于等于500。
測試樣例:"A%sC%sE",7,['B','D','F']
返回:"ABCDEF"
方法一:特殊函數(shù)替換法
解析:定義pos在原字符串A中查找“%s”子串,從而獲得“%s”的初始位置。然后替換“%s”,即定義一個下標i,并初始化為0,再定義一個字符串接收arg中替換的字符,然后遍歷原字符串A,當其元素為“%s”時,將arg中元素賦值給字符串s,再利用replace函數(shù)將原字符串中的“%s”替換成s中的元素。最后判斷參數(shù)列表的字符數(shù)是否大于占位符個數(shù),如果是則將剩下的參數(shù)字符添加到字符串的末尾。由此得到替換后的字符串。
代碼:
//string::npos參數(shù):pos 是一個常數(shù),用來表示不存在的位置,類型一般是std::container_type::size_type 許多容器都提供這個東西。取值由實現(xiàn)決定,一般是-1,這樣做,就不會存在移植的問題了。
//find函數(shù)的返回值是整數(shù),假如字符串存在包含關(guān)系,其返回值必定不等于npos,但如果字符串不存在包含關(guān)系,那么返回值就一定是npos。所以不難想到用if判斷語句來實現(xiàn)!
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;
}
方法二:特殊函數(shù)刪除法
解析:先定義一個變量k,初始化為0,表示arg替換時的下標,然后遍歷原字符串A,替換“%s”,即判斷元素是否為‘%’并且下個元素為‘s’,如果是,arg中的某個元素替換當前元素,再用erase函數(shù)刪除后一個元素;最后判斷變量k是否不等于arg的長度,如果是,則將剩下的字符使用循環(huán)語句將其放入在字符串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;
}
方法三:特殊函數(shù)復(fù)制法
解析:先遍歷原字符串A,將其‘%s’替換,即定義一個變量找到‘%’的位置,然后用substr復(fù)制函數(shù)將‘%’位置前的字符復(fù)制到新的字符res中,再將‘%s’替換的arg中的元素寫入新地字符串res中,此時用substr函數(shù)將A的字符串變?yōu)椤?s’之后的部分,如此反復(fù)替換完‘%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種字符串替換方式和具體的操作過程,字符串主要用于編程,概念說明、函數(shù)解釋等,在Java編程中也扮演著一個不容忽視的角色。我們也不容小覷字符串的作用。觀看本站的Java基礎(chǔ)教程,打下Java編程的基礎(chǔ),才能真正意義上學(xué)好Java!