题目:字符串过滤
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class zifuchuanguolv {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入字符串:");
String str = in.readLine();
StringBuffer sb = new StringBuffer();
//判断字符串是否为空
if(str != null && !str.equals("")){
//判断是否全部是小写字母
boolean flag = isEnglishNumber(str);
if(flag){
for(int i = 0;i<str.length();i++){
Character c = str.charAt(i);
String s = isEnglish(c.toString());
if(i == 0){
sb.append(str.charAt(0));
}else{
boolean b = true;
if(sb != null){
b = isContain(sb.toString(),s);
}
if(!b){
sb.append(s);
}
}
}
System.out.println("筛选后:" + sb.toString());
}else{
System.out.println("筛选后无结果:");
}
}
}
/**
* 查询字符是否存在
* @param english
* @return
*/
public static String isEnglish(String english){
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(english);
if(!m.find()){
return null;
}
return english;
}
/**
* 判断是否包含
* @param english 原字符串
* @param number 是否包含的字符
* @return
*/
public static boolean isContain(String english,String number){
if(english != null){
if(!english.contains(number)){
return false;
}
}
return true;
}
/**
* 校验是否是小写英文字母
* @param english
* @return
*/
public static boolean isEnglishNumber(String english){
Pattern pattern = Pattern.compile("^[a-z]+$");
Matcher m = pattern.matcher(english);
if(!m.matches()){
return false;
}
return true;
}
}