首页 > 代码库 > 暑假写的有关字符串处理的程序
暑假写的有关字符串处理的程序
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截 取的字符串,但要保证汉字不被截取半个, 如“我 ABC”,4,应该截取“我 AB”, 输入“我 ABC 汉 DEF”,6,应该输出“我 ABC”,而不是“我 ABC+汉的半个”。
public static void main(String[] args) throws UnsupportedEncodingException {
Scanner in=new Scanner(System.in);
System.out.println("input a String:");
String str=in.next();Task2_1
String c=CutString(str,6);
System.out.println("output the String after cut:"+c);
}
private static String CutString(String string, int length) throws UnsupportedEncodingException {
/*length为截取的字符串字节数*/
byte[] Byte=string.getBytes("Unicode");
int n=0;/*字节数*/
int i=2;
for(;i<Byte.length&&n<length;i++){
if(i%2==1)
n++;
else
if(Byte[i]!=0)
n++;
}
if(i%2==1)
{
if(Byte[i-1]!=0)
i--;
else
i++;
}
return new String(Byte,0,i,"Unicode");
}
Task2_2
如果一串字符如"aaaabbc 中国1512"要分别统计英文字符的数量,中文字符的数量,和数字 字符的数量。
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("input a string including English,Chinese,Number and Others");
String str=in.next();
int chinumber=0;
int engnumber=0;
int number=0;
int othernumber=0;
for(int i=0;i<str.length();i++)
{
char getchar=str.charAt(i);
if(getchar>=‘0‘&&getchar<=‘9‘)
number++;
else if((getchar>=‘a‘&&getchar<=‘z‘)||(getchar>=‘A‘&&getchar<=‘Z‘))
engnumber++;
else if(isChinese(getchar))
chinumber++;
else
othernumber++;
}
System.out.println("English numbers are"+engnumber);
System.out.println("Numbers are"+number);
System.out.println("Chinese Numbers are:"+chinumber);
System.out.println("Other Numbers are:"+othernumber);
}
private static boolean isChinese(char getchar) {
Character.UnicodeBlock ub=Character.UnicodeBlock.of(getchar);
if(ub==Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS//CJK 统一表意符号
||ub==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS//CJK 兼容象形文字
||ub==Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A//CJK 统一表意符号扩展 A
||ub==Character.UnicodeBlock.GENERAL_PUNCTUATION//常用标点
||ub==Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION//符号和标点
||ub==Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS)//半角及全角形式
return true;
else
return false;
}
1:要想统计其中的中文字符的个数就需要调用isChinese方法。
2:Java中的字符串不是数组,更像是指针,要想获得字符中第i个字符,需要调用(StringName).charAt(i)。
Task2_3
创建一个接口,有方法一用于求图形面积,方法二用于求周长。其次创建一个图形类Circle实现以上述接口两个方法用于 求圆的面积和周长,并且设置一常量pi表示圆周率,提供一个无参的构造方法初始化圆的半径r为1,和一个有参的构造方法 用于初始化其半径r值,在main方法中创建对象的上转型对象,求出圆的周长和面积并打印输出。
public static void main(String[] args){
Object obj;
obj=new circle(4);
circle c=(circle)obj;
System.out.println("Circle‘s area is " + c.getArea(c));
System.out.println("Circle‘s perimeter is "+c.getPerimeter(c));
}
}
/*circle类*/
class circle implements Count{
private double r;
private final double pi=3.14;
/*构造函数*/
public circle(){
r=1;
}
public circle(double radius){
r=radius;
}
/*将接口中的方法实例化*/
public double getArea(circle C) {
return (C.pi)*(C.r)*(C.r);
}
public double getPerimeter(circle C) {
return 2*(C.pi)*(C.r);
}
接口
public interface Count {
double getArea(circle C);
double getPerimeter(circle C);
}
1:idea中接口的创建和Ecilipase中不一样,无法new出来,idea中需要在packge中在创建一个class,在创建class的过程中会弹出选项让你选择interface
2:上转型对象,假设B类从A类继承,当用B类创建对象b的引用赋值给A类对象a时,则称A类对象a是子类B对象b的上转型对象
Eg: A a; or A a;
a=new B(); B b=new B();
A=b;
注意:上转型对象不能调用子类中新创建的方法和实例域
暑假写的有关字符串处理的程序