实验三 String类的应用
实验目的
掌握类String类的使用;
学会使用JDK帮助文档;
实验内容
1.1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
package test;
public class One {
public static void main (String argsp[]) {
String str = "this is a test of java";
int count1 = 0;
for(int i = 0; i < str.length();i++) {
char c = str.charAt(i);
if(c == 's')
count1++;
}
System.out.println("s出现的次数为:"+count1);
int count2 = 0;
int index = 0;
String ch = "is";
while((index = str.indexOf(ch,index)) != -1) {
index = index + ch.length();
count2++;
}
System.out.println("子串\"is\"出现的次数为:"+count2);
int count3 = 0;
char a[] = str.toCharArray();
for(int i = 0; i < str.length(); i++) {
if(a[0] == 'i' && a[1] == 's' && a[2] == ' ')
count3++;
else if(a[i] == 'i' && a[i - 1] == ' ' && a[i + 1] == 's' && (a[i + 2] == ' '));
count3++;
}
System.out.println("单词\" is\"出现的次数为:"+count3);
String[] words = str.split(" ");
System.out.print("倒叙:");
for(int i = words.length-1; i >= 0; i--){
System.out.print(words[i]+" ");
}
}
}
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。
package test;
import java.util.Scanner;
public class Two {
@SuppressWarnings("static-access")
public static void main (String args[]) {
System.out.println("加密请输入a,解密请输入b");
Scanner operate = new Scanner(System.in);
if(operate.nextLine().equals("b")) {
String str = operate.nextLine();
char b[] = str.toCharArray();
for(int j = 0; j < str.length();j++) {
b[j] = (char)(b[j] - 3);
}
str=str.valueOf(b);
System.out.println(str);
}
else{
String str = operate.nextLine();
char b[] = str.toCharArray();
for(int i = 0; i < str.length();i++) {
b[i] = (char)(b[i] + 3);
}
str=str.valueOf(b);
System.out.println(str);
}
}
}
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
package test;
public class Three {
public static void main(String args[]) {
String str = "ddejidsEFALDFfnef2357 3ed";
char a[] = str.toCharArray();
int count1 = 0, count2 = 0, count3 = 0;
for(int i = 0; i <= str.length() - 1;i++){
if(a[i] >= 'A' && a[i] <= 'Z'){
count1++;
}
else if(a[i] >= 'a' && a[i] <= 'z') {
count2++;
}
else {
count3++;
}
}
System.out.println("大写字母数为:"+count1);
System.out.println("小写字母数为:"+count2);
System.out.println("非英文字母数为:"+count3);
}
学习总结
1.学习使用了很多String类常用操作方法
public String(char[]value) 直接将一个字符数组变为一个字符串
public char[] toCharArray() 将字符串变为字符数组
public charAt(int index) 从一个字符串中取出指定位置的字符
public int length() 取得字符串长度
*public boolean equals(String str) 判断两个字符内容是否相等
试验第二题中,对于输入操作不了解,输入操作没有关闭,输入了字符但是没有进入判断语句,导致结果出错。当把输入操作放入判断语句中,就OK了。
试验第三题中,13行中报错,索引25超出长度25的边界,看了一下发现应该是for循环多循环了一次,把=号去掉就可以了。
本次试验使我熟悉了一些字符串的操作,做起来还是挺慢的。
2.继承
*类的继承格式:
class 父类{} //定义父类
class 子类 extends 父类{} //使用extends关键字实现继承
继承可以理解为扩展,子类继承父类,并且子类自己可以扩展自己的属性和方法。
注意:在java中只允许单继承,不能使用多重继承。也就是说,一个子类只能继承一个父类。但允许进行多层继承,就是说一个子类可以有一个父类,一个父类还可以有一个父类。
子类是不能直接访问父类中的私有成员,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。子类对象的实例化
子类对象在实例化之前必须首先调用父类中的构造方法之后再调用子类自己的构造方法。子类的构造方法中会隐含一个super()语法,它的作用是可以调用父类中的无参构造,当父类中程序员没有定义构造方法的时候,它会自动生成一个无参什么都不做的构造方法。当程序员在父类中定义了有参的构造方法时,最好再定义一个无参的构造方法,防止子类中代码报错。
注意:使用super可以调用父类中的构造方法丶普通方法丶属性,与this调用构造方法的要求是一样的,语句必须放在子类构造方法的首行,所有它和this关键词是不可以同时使用的。
3.方法的覆写
在继承关系中方法的覆写指子类定义了与父类中同名的方法,但是在方法覆写时必须考虑权限,既被子类覆写的方法不能拥有比父类方法更加严格的访问权限。
this 与 super的区别
区别点 | this | super |
---|---|---|
属性访问 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 访问父类中的属性 |
方法 | 访问本类中的方法,如果本类中没有此方法,则从父类中继续查找 | 直接访问父类中的方法 |
调用结构 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法的首行 |
特殊 | 表示当前对象 | 无此概念 |
方法的重载与覆写的区别
区别点 | 重载 | 覆写 |
---|---|---|
单词 | Overloading | Overriding |
定义 | 方法名称相同,参数的类型或个数不同 | 方法名称丶参数的类型丶返回值类型全部相同 |
范围 | 发生在一个类中 | 发生在继承类中 |