题目:字符串过滤

题目:字符串过滤

 通过键盘输入一串小写字母(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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值