1. 程式人生 > >JAVA 刪除字串裡指定字元

JAVA 刪除字串裡指定字元


/**
 *1將字串中"ac"刪除
 *2將字串中"b"刪除
 *3最好只有一次遍歷
 * @author lenovo
 *

 */

標準答案,,,還是老師的思路牛X,看完程式碼五體投地

改進思路:陣列cs[],遍歷,滿足條件的賦給targets[],不滿足條件的剔除

public static void main(String[] args) {
int k=0;
String str="aabbbbbbbccabcasdfghjk";
char  cs[]=str.toCharArray();
char targets[]=new char[cs.length];
for(int i=0;i<cs.length;i++){
if(cs[i] != 'b'){
if(cs[i] != 'c' ){
targets[k]=cs[i];
k++;
}else if(k!=0 &&targets[k-1] =='a'){
k--;
}
}else{

}
}
String str1=new String(targets,0,k);
System.out.println("------------>"+str1);
}

}

最初做題時遇到的問題:如何能夠只進行一次遍歷


自己寫的程式碼: (後邊元素前置時用到無數次遍歷)

package com.zzuqg.java10.follow;
// 思路:  字串中尋找最長子字串,,  asdfghjsd
// 遇到的問題:輸出資料出現錯位     解決方法:用dataIndex替換cs.length
public class Work1 {
public static void main(String[] args) {
String str="abcdefg";
int dataIndex;
char[] cs=str.toCharArray();
dataIndex=cs.length;//7
for(int i=0;i<dataIndex;i++){
if(cs[i]=='b'){   //查詢'b'在字元陣列中的位置
for(int j=i;j<dataIndex-1;j++){   //'b'後面的元素逐個往前移動           
cs[j]=cs[j+1];
}

dataIndex--;
if( i!=0  && cs[i-1]=='a'  &&  cs[i]== 'c' ){  //尋找'ac'的位置
for(int j=i-1;j<dataIndex-2;j++){  //刪除'ac'
System.out.println("....");
cs[j]=cs[j+2];
}
dataIndex -= 2;
}else{

}

}

if(cs[i]=='a' && cs[i+1]=='c'){       //遇到的問題:該段if判斷語句輸出結果不正確    解決方法:將 || 換為 &&
for(int j=i;j<dataIndex-2;j++){
cs[j]=cs[j+2];
}
dataIndex -=2;
}

}
for(int i=0;i<dataIndex;i++){
System.out.println(cs[i]);
}
}
}