第五周课程总结&试验报告(三)

第五周课程总结&试验报告(三)

实验三 String类的应用

实验目的

掌握类String类的使用;
学会使用JDK帮助文档;

实验内容

###1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)

统计该字符串中字母s出现的次数。
统计该字符串中子串“is”出现的次数。
统计该字符串中单词“is”出现的次数。
实现该字符串的倒序输出。

实验代码

package 作业;

public class zifu {
    public static void main(String[] args) {
        String s = "this is a test of java";  定义赋值
        int n = s.indexOf("s",3);      定义,查找指定位置字符"s"
        System.out.println(+n);    输出s数量
        int a = s.indexOf("is");        定义,查找指定位置字符"is"
        System.out.println(+a);    输出is数量
        int b = (s.split(" is ")).length - 1;                    用拆分字符串的方法来求单词"is"的数量,也就是当初现前后有空格的"is"时,对字符串进行拆分
        System.out.println("单词is出现的次数" + b);     并把计算拆分好的字符串的数量,在其基础是减一,就获得了前后又空格的"is"的数量;
        StringBuffer r = new StringBuffer ("this is a test of java");     利用StringBuffer reverse方法,对字符串内容进行反转保存
        System.out.println(r.reverse());

    }

}

1579991-20190926172225458-1668165062.png

1579991-20190926172636449-1617410804.png

本来是想把空格作为拆分条件对字符串进行拆分,定义赋值b='is”然后用equals把b与拆分后的字符串进行比较,如果相等,则count++,以此来求出单词is的数量,但输出错误了,刚好看到StringBuffer reverse

方法觉得这种方法更加便利和简洁,所以换StringBuffer reverse方法来求单词is。本题总体来说还是很简单的,灵活运用String和StringBuffer的构造方法就能解决。

2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。

package 作业;

import java.util.Scanner;

public class psw {
    public static void main(String[] args) {
        @SuppressWarnings("resource")         代码没问题,只是取消一些特定代码段中的警告
        Scanner s = new Scanner(System.in);     定义scanner,等待输入
        System.out.println("输入字符串:");
        String r = s.nextLine();                          读取输入内容
        char t[] = new char[r.length()];                创建字符数组t
        t=r.toCharArray();                                 将用户输入的字符串通过toCharArray()转化为字符数组存到t中
        int i;
        for (i=0;i<t.length;i++) {
            t[i]=(char)(t[i]+3);                将一般的数组字符直接加3然后强制类型转化为char类型
        }
        String c=" ";                             定义字符串并使其赋值为空
        for (i=0;i<r.length();i++) {            将字符数组转化为字符串
            c=c+t[i];                    
        }
        System.out.println("改变后的字符串:\n"+c);       输出
    }
}

1579991-20190926174310170-546381380.png

1579991-20190926174314346-1536987914.png

在前面发现自己定义的字符串s出现了警告,结果发现代码没问题,最后用@SuppressWarnings("resource")消除了警告,在写代码时,

for循环里;i<t.length,我之前多加了一个等号,所以输出时出现了错误,最后发现并改正,代码就没问题了,本题没有什么做题思路,以为思路都已经给了出来。

3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。

package 作业;

public class 输出 {
    public static void main(String[] args) {
        String s = "ddejidsEFALDFfnef2357 3ed";       定义赋值
        int small=0,big=0,i,not=0;
        for (i=0;i<s.length();i++) {           利用for循环对字符串进行沥遍
            char c=s.charAt(i);             从中依次取出字符,并转换赋值给数组c
            if (Character.isLowerCase(c)) {     利用Character.isLowerCase判段取出来的字符是否为小写
                small++;                                 
            }
            else if (Character.isUpperCase(c)){   利用Character.isUpperCase(c)判断字符是否为大写
                big++;
            }
        }
        not=s.length()-small-big;    求出非英文字母数
        System.out.println("大写字母个数:"+big);
        System.out.println("小写字母个数:"+small);  输出
        System.out.println("非英语字母个数:"+not);
    }
}

1579991-20190926175710965-1573617331.png

1579991-20190926175716630-101354266.png

错误的时候还没完全来了解Character.isLowerCase和Character.isUpperCase,我出错的地方是我填了i,这两个方法里面要填数组名,之后去百度了解了,定义一个数组c,并把s的内容转换赋值给数组c,

char c=s.charAt(i);用这个语句取出每一个字符元素,并执行if和else if语句,求出答案。

总结

这是我本周自学了一小点,学习了Stringbuffer和大小写字符的判断。

Character character = 'A';
// isDigit方法判断字符是否为数字
boolean isDigit = Character.isDigit(character);
System.out.println("isDigit="+isDigit);
// isLetter方法判断字符是否为字母
boolean isLetter = Character.isLetter(character);
System.out.println("isLetter="+isLetter);
// isLowerCase方法判断字符是否为小写
boolean isLowerCase = Character.isLowerCase(character);
System.out.println("isLowerCase="+isLowerCase);
// isUpperCase方法判断字符是否为大写
boolean isUpperCase = Character.isUpperCase(character);
System.out.println("isUpperCase="+isUpperCase);

StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。

reverse方法

public StringBuffer reverse()

该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.reverse();

经过反转以后,对象sb中的内容将变为”cba”。

setCharAt方法

public void setCharAt(int index, char ch)

该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如:

StringBuffer sb = new StringBuffer(“abc”);

sb.setCharAt(1,’D’);

则对象sb的值将变成”aDc”。

继承:

    1.子类继承父类的成员变量
  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
  2.子类继承父类的方法
  同样地,子类也并不是完全继承父类的所有方法。
  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
  注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
  3.构造器
  子类是不能够继承父类的构造器,但是要注意的是,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
       注意一个子类只能继承一个父类,但我们可以用多层继承来实现多重继承,继承是要用到extends,格式是: class 子类 extends 父类{ }。
       子类实例化前会先调用父类构造方法再用子类。
    ###方法的覆写:最好每个类加上一个无参构造,而且子类覆写的方法权限只增不减的,相比与父类。

###重载与覆写的区别
重载:方法名相同参数不同,两个可以同时用,用参数区分开。
覆写:方法名相同参数相同,即上一个方法作废。
重载,简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。 函数特征包括函数名,参数的类型和个数。

###注意:super与this不能同时用,以为它们都要放在首行。
  不同点: 
  1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用 
  2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用    
 相同点: 
 1、super()和this()都必须在构造函数的第一行进行调用,否则就是错误的

###final:
final声明的类不能有子类
final声明的方法不能被子类所覆写
final声明的变量即成为常量,常量不能修改
###抽象类:
有点像模板,且一个子类只能继承一个抽象类。
抽象类的使用原则如下:
抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

本周所讲课堂内容我已经消化的七七八八了,作业也用心去完成了,本周也自学了一些东西,继续努力。

转载于:https://www.cnblogs.com/neir/p/11593265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值