首页 > 代码库 > 暑假写的有关字符串处理的程序

暑假写的有关字符串处理的程序

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截 取的字符串,但要保证汉字不被截取半个, “我 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方法。

2Java中的字符串不是数组,更像是指针,要想获得字符中第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);
}

 

1idea中接口的创建和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;

注意:上转型对象不能调用子类中新创建的方法和实例域

暑假写的有关字符串处理的程序