设计函数,输入为一个字符串,里边包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。
2010-10-01 21:21
986 查看
2、设计函数,输入为一个字符串,里边包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。
a) 用常用语言(c/c++/php/java)编写函数,实现功能为:按顺序提取输入文本中的中文字符,形成新的文本串返回调用者。
b) 如果调用者有时希望得到输入串的全中文内容,有时希望得到英文内容,那么该函数应如何设计。
c) 如果调用者希望获取输入串中包含中文、英文、数字这三种字符中的一种或多种的需求不定时,函数应如何设计。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;
/*
* 创建日期 2010-10-1
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author zhchyun
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class subString {
//截取中文字符
public static String getChinese(String str)throws UnsupportedEncodingException{
String subChinese="";
for(int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte [] buf =(ch+"").getBytes("GBK");
if (buf.length >1){
subChinese+=ch;
}
}
return subChinese;
}
//截取英文字符
public static String getEnglish(String str) throws UnsupportedEncodingException{
String subEnglish="";
for (int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte[] buf=(ch+"").getBytes("GBK");
if (buf.length ==1 && Character.isLetter( ch)){
subEnglish+=ch;
}
}
return subEnglish;
}
//截取数字
public static String getDigit(String str) throws UnsupportedEncodingException{
String subDigit="";
for(int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte[] buf=(ch+"").getBytes("GBK");
if (buf.length ==1 && Character.isDigit(ch)){
subDigit+=ch;
}
}
return subDigit;
}
public static void main(String[] args) throws UnsupportedEncodingException {
final int CHINESE=0x1;
final int ENGLISH=0x2;
final int DIGIT=0x3;
int type;
String str = null;
String substr=null;
try {
str = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
System.out.println("源字符串为:"+str);
System.out.println("请输入要截取字符串的类型:1.中文 2.英文 3.数字");
Scanner sc=new Scanner(System.in);
type=(int)sc.nextInt();
if (type==1){
substr=getChinese(str);
System.out.println(" 截取中文字符为:");
System.out.println(substr);
}
else if (type==2){
System.out.println("截取英文字符为:");
substr=getEnglish(str);
System.out.print(substr);
}
else if (type==3){
System.out.println("截取数字为:");
substr=getDigit(str);
System.out.print(substr);
}
}
}
这只是对第三问的解答,第一问可以只调用getChinese();第二问可以参照第三问,type只设置1和2 即可。个人答案仅供参考。只是还没有明白buf=(ch+"").getBytes("GBK");中为什么要ch+""才可以,是不是得到高位的GBK编号?
a) 用常用语言(c/c++/php/java)编写函数,实现功能为:按顺序提取输入文本中的中文字符,形成新的文本串返回调用者。
b) 如果调用者有时希望得到输入串的全中文内容,有时希望得到英文内容,那么该函数应如何设计。
c) 如果调用者希望获取输入串中包含中文、英文、数字这三种字符中的一种或多种的需求不定时,函数应如何设计。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;
/*
* 创建日期 2010-10-1
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author zhchyun
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class subString {
//截取中文字符
public static String getChinese(String str)throws UnsupportedEncodingException{
String subChinese="";
for(int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte [] buf =(ch+"").getBytes("GBK");
if (buf.length >1){
subChinese+=ch;
}
}
return subChinese;
}
//截取英文字符
public static String getEnglish(String str) throws UnsupportedEncodingException{
String subEnglish="";
for (int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte[] buf=(ch+"").getBytes("GBK");
if (buf.length ==1 && Character.isLetter( ch)){
subEnglish+=ch;
}
}
return subEnglish;
}
//截取数字
public static String getDigit(String str) throws UnsupportedEncodingException{
String subDigit="";
for(int i=0;i<str.length() ;i++){
char ch=str.charAt( i);
byte[] buf=(ch+"").getBytes("GBK");
if (buf.length ==1 && Character.isDigit(ch)){
subDigit+=ch;
}
}
return subDigit;
}
public static void main(String[] args) throws UnsupportedEncodingException {
final int CHINESE=0x1;
final int ENGLISH=0x2;
final int DIGIT=0x3;
int type;
String str = null;
String substr=null;
try {
str = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
System.out.println("源字符串为:"+str);
System.out.println("请输入要截取字符串的类型:1.中文 2.英文 3.数字");
Scanner sc=new Scanner(System.in);
type=(int)sc.nextInt();
if (type==1){
substr=getChinese(str);
System.out.println(" 截取中文字符为:");
System.out.println(substr);
}
else if (type==2){
System.out.println("截取英文字符为:");
substr=getEnglish(str);
System.out.print(substr);
}
else if (type==3){
System.out.println("截取数字为:");
substr=getDigit(str);
System.out.print(substr);
}
}
}
这只是对第三问的解答,第一问可以只调用getChinese();第二问可以参照第三问,type只设置1和2 即可。个人答案仅供参考。只是还没有明白buf=(ch+"").getBytes("GBK");中为什么要ch+""才可以,是不是得到高位的GBK编号?
相关文章推荐
- (Map实现)有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- 获取包含中文,字母,数字集合的字符串的长度(1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节)
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
- 分割字符串(有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数)
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 有一个字符串,其中包含中文字符、英文字符和数字字符 ,请统计和打印出各个字符的个数。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
- 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
- 分割字符串(有一个字符串,其中包含中文字符、英文字符和数字字符, * 请统计和打印出各个字符的个数)
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
- 有一个字符串,其中包含中文字符、英文字符和数字、空格及其他字符,请统计和打印出各个字符的个数。
- 输入一个字符串,分别统计出包含的英文字母、数字、空格和其他字符的个数
- java 集合 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- 写一个函数,输入一串字符串,求这个字符串中有多少个英文,多少空格,多少个数字,多少个其它字符
- 一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- 设计一个函数,对传入的字符串(假设字符串中只包含小写字母和空格)进行加密操作,加密的规则是a变d,b变e,c变f,……,x变a,y变b,z变c,空格不变,返回加密后的字符串