更新時間:2020-10-30 17:34:56 來源:動力節點 瀏覽1396次
字符串在存儲上類似字符數組,所以它每一位的單個元素都是可以提取的,同樣也是可以替換的。本文我們就來講一講字符串替換操作。
一般情況下,字符串替換分為以下三種情況:
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天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習