设计函数,输入为一个字符串,里面包含中文、英文、数字等字符,编码为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黄老师");
}
}