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


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

    实验三 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());
    
    	}
    
    }
    

    本来是想把空格作为拆分条件对字符串进行拆分,定义赋值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("改变后的字符串:
    "+c);       输出
    	}
    }
    

    在前面发现自己定义的字符串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);
    	}
    }
    

    错误的时候还没完全来了解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类。);

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

  • 相关阅读:
    针对上一篇文章中的代码,想出的重构方案(python实现)
    Android中的广播Broadcast详解
    Android中的Serialable和Parcelable的区别
    Java中的序列化Serialable高级详解
    Android中的Parcel机制(下)
    Android中的Parcel机制(上)
    Java中获取前一天和后一天时间
    Android中的Service详解
    Window 通过cmd查看端口占用、相应进程、杀死进程等的命令
    Java高新技术第三篇:注解的使用
  • 原文地址:https://www.cnblogs.com/neir/p/11593265.html
Copyright © 2020-2023  润新知