0806--中文字符处理

设计函数,输入为一个字符串,里面包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。

 

a)用常用语言编写函数,实现功能为:按顺序提取输入文本中中文字符,形成新的文本串返回调用者。

  

b)如果调用者又是希望输入串的全中文内容,有时希望得到英文内容,那么函数应如何设计

  

c)如果调用者希望获取输入串中包含中文、英文和数字这三种字符中的一种或者多种需求不定时,函数应如何设计

 

 

import java.util.*;


interface GetData{
	public void getChar(String str);
	
}

class  GetChi implements GetData{
		public void getChar(String str){
			byte[] bstr=str.getBytes();
			String ret="";
			int index=0;
			for(int i=0;i<bstr.length;i++){
				if(bstr[i]<0){
					i++;
					char c=str.charAt(index);
					ret=ret+String.valueOf(c);
				}
				index++;
			}
			System.out.println("中文字符:"+ret);
		}
}
class GetEng implements GetData{
	public void getChar(String str){
		byte[] bstr=str.getBytes();
		String ret="";
		int index=0;
		for(int i=0;i<bstr.length;i++){
			if((bstr[i]>=97 && bstr[i]<=122 )||(bstr[i]>=65 && bstr[i]<=90)){
				ret=ret+String.valueOf(str.charAt(index));
				
			}else if(bstr[i]<0){
				i++;
			}
			index++;
		}
		System.out.println("英文字符:"+ret);
		
	}
	
}

class GetDigit implements GetData{
	public void getChar(String str){
		byte[] bstr=str.getBytes();
		String ret="";
		int index=0;
		for(int i=0;i<bstr.length;i++){
			if(Character.isDigit(bstr[i])){
				ret=ret+String.valueOf(str.charAt(index));
			}else if(bstr[i]<0){
				i++;
			}
			index++;
		}
		
		System.out.println("数字字符:"+ret);
	}
}

class Composite implements GetData{
	List<GetData> list;
	public Composite(){
		list=new ArrayList<GetData>();
	}
	public void getChar(String str){
		Iterator it=list.iterator();
		while(it.hasNext()){
			GetData g=(GetData)it.next();
			g.getChar(str);
			
		}
	
	}
	public void addTask(GetData g){
		list.add(g);
		
	}
}

public class TestGetData{
	public static void main(String[] args){
		GetData g1=new GetChi();
		GetData g2=new GetEng();
		GetData g3=new GetDigit();
		GetData gg=new Composite();
		gc.addTask(g1);
		gc.addTask(g2);
		gg.getChar("abc123黄老师");
	}
	
}

 

你可能感兴趣的:(C++,c,C#)