输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
- public class DeleteSpecificChars {
- /**
- * Q 63 在字符串中删除特定的字符
- * 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
- * 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
- */
- public static void main(String[] args) {
- String strSource="They are students";
- String strDelete="aeiou";
- String result=deleteSpecificChars(strSource,strDelete);
- System.out.println(result);
- }
- /*
- * 1.use a 'hashtable' to record the letters to be delete
- * 2.use two pointers to shrink the source string:
- * replace the letter to delete with the following letter not to delete
- */
- public static String deleteSpecificChars(String strSource,String strDelete){
- char[] charSource=strSource.toCharArray();
- char[] charDelete=strDelete.toCharArray();
- int sLen=strSource.length();
- int dLen=strDelete.length();
- int[] exist=new int[256];
- for(int i=0;i<dLen;i++){
- char letter=charDelete[i];
- exist[letter]++;
- }
- int pSlow=0,pFast=0;
- while(pFast<sLen){
- char curLetter=charSource[pFast];
- if(exist[curLetter]==0){//should not delete
- charSource[pSlow]=charSource[pFast];
- pSlow++;
- }
- pFast++;
- }
- return new String(charSource,0,pSlow);//unlike c/c++,we can only form a string in this way
- }
- }