声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。
何海涛日志:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
思路:这道题目其实比较简单,在何海涛的日志中用的都是C/C++,我这里用的是java,思路都是一样的,但是因为不同的语言,实现的细节方面就有些不同,因为在java中,String的内容是不能改变的,虽然我们写代码的时候,觉得可以改变,但是实际上java是新创建了一个String,所以不能像何海涛日志中写的那样去修改,当然如果参数为char数组就另当别论了。我这里传的参数是String,所以在代码里面我又新建了一个StringBuffer作为字符缓存,在C/C++里面,一个char只占一个字节,最多包含256个字符,但是java中一个char占两个字节,所以我这里直接用HashSet的特性,元素不能重复。
代码:
/**
* 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
* 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
* @author hongbin.gao
*
*/
public class DeleteChars {
public static void main(String[] args){
String str1 = "They are students.";
String str2 = "aeiou";
String result = deleteChars_1(str1,str2);
System.out.println(result);
}
public static String deleteChars_1(String str1,String str2){
int length_1 = str1.length();
int length_2 = str2.length();
Set<Character> set = new HashSet<Character>();
int i=0;
while(i<length_2){
set.add(str2.charAt(i));
i++;
}
StringBuffer strBuf = new StringBuffer();
i=0;
int index = 0; //index保存到目前为止str1中一共有几个字符是在str2中的
while(i<length_1){
if(!set.contains(str1.charAt(i))){
strBuf.append(str1.charAt(i));
}
i++;
}
return strBuf.toString();
}
}