一、实验目的:
在集成开发环境下,通过阅读Java API文档来使用合适的常用类及方法解决实际问题。
二、实验目标:
- 能够通过阅读Java API文档来灵活运用Java API中的一些常用类(例如String、StringBuffer、System、Runtime、Math、Random等)来解决实际问题。
- 能够灵活运用用Java语言的常用集合类(ArrayList、Map、Collections、Array等)来解决实际问题。
三、实验内容
3.1 实验环境
java version "13.0.2" 2020-01-14
Java(TM) SE Runtime Environment (build 13.0.2+8)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
3.2 具体实验内容
- 定义一个方法,根据用户身份证号码计算其年龄并输出。
- 采用Random类或者Math类随机生成一组随机数,存入List集合类(ArrayList、LinkedList等都可以),并利用Iterator接口便利集合。
- 分别统计字符串中出现的大写字母、小写字母个数,以及
出现的数字字符以及其他字符的个数。
- 编写一个程序,实现字符串大小写的转换并倒序输出。具体要求:(1)使用for循环将字符串从最后一个字符开始遍历。(2)遍历的当前字符如果是大写字符,就使用toLowerCase()方法将其转换为小写字符,反之则使用toUpperCase()方法将其转换为大写字符。(3)定义一个StringBuffer对象,调用append()方法依次添加遍历的字符,最后调用StringBuffer对象的toString( )方法,并将得到的结果输出。
四、实验过程分析
4.1 实验步骤
1.身份证,直接在main方法中进行输入和输出,再利用字符串的分割、组合等方法进行判断,再输出结果。
代码如下:
package demo;
import java.util.Calendar;
import java.util.Scanner;
public class Main {
public static Integer oldYear;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入你的身份证号: ");
StringBuilder id = new StringBuilder(scanner.next());
Calendar calendar = Calendar.getInstance();
int year = Integer.parseInt(id.substring(6, 10));
int month = Integer.parseInt(id.substring(10, 12));
int day = Integer.parseInt(id.substring(12, 14));
oldYear = calendar.get(Calendar.YEAR) - year;
if (calendar.get(Calendar.MONTH) < month) {
oldYear--;
} else if (calendar.get(Calendar.YEAR) == month) {
if (calendar.get(Calendar.DAY_OF_WEEK) < day) {
oldYear--;
}
}
System.out.println("你现在的年龄是" + oldYear);
}
}
- Random类或者Math类,创建一个Random类对象,利用这个对象的方法进行随机输入。
代码如下:
package demo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random random = new Random();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(random.nextInt(100));
}
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
}
}
- 统计字符串,在main中输入一个字符串,在利用遍历的方法进行一个一个字符的判断,再输出结果。
代码如下:
package demo;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int upChar = 0, lowChar = 0, digit = 0, other = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isUpperCase(c)) {
upChar++;
} else if (Character.isLowerCase(c)) {
lowChar++;
} else if (Character.isDigit(c)) {
digit++;
} else {
other++;
}
}
System.out.println("upChar = " + upChar);
System.out.println("lowChar = " + lowChar);
System.out.println("digit = " + digit);
System.out.println("other = " + other);
}
}
- 实现字符串大小写,在main方法中,输出一串字符串,利用遍历方法,再利用Character方法进行将大小写判断。
代码如下:
package demo;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
StringBuffer reverse = new StringBuffer();
for (int i = s.length() - 1; i >= 0; i--) {
char c = s.charAt(i);
if (Character.isLowerCase(c)) {
reverse.append(Character.toUpperCase(c));
} else {
reverse.append(Character.toLowerCase(c));
}
}
System.out.println(reverse.toString());
}
}
4.2 错误分析
1.身份证一定要输入正确,否则就会出现问题,如年纪过大和不符合等。
2.在利用迭代器进行遍历时,要考虑迭代器是用在什么类型上,不同的类型迭代器也不一样。
3.本实验在考虑字符串统计时,输入的数据一定要符合,否则就会报错,如你输入了数字和空格等其他字符。
4.本实验无需单独再定义反转方法,因为在Character中有现成的方法可以利用。
五、实验总结
答:1、文档注释可以修饰在类上用于说明类的功能,给使用者第一个直观印象
2、字符串是不变对象,字符串对象一旦创建内容不可以改变。
若内容改变,一定会创建新对象
java 的编译器做了一个优化,若一个计算表达式运算符的两边都是字面量。
那么编译的时候就会将其运算,将结果生成到 .class 文件中。
所以下面的这句话,在 .class 文件中变为了 :
String s4 = "123"+"abc"; //String s4 = "123abc";
3、int lenght() 获取字符串的长度 str.lenght ()
该方法可以获取一个字符串所占用的字符数量
无论中英文,每个字符一个长度
4、int indexOf(String str) 查看字符串的位置
查看给定的字符串在当前字符串的位置 ,位置就是下标,从 0 开始
若返回值为 -1 说明当前字符串中不包含给定的内容。
从给定的下标对应的位置处开始找第一次出现字符串的位置
index= str.indexOf("in", 4);
5、String subString(start, end) 截取字符串
java 的 api 中有一个共性
凡是使用两个数字表示一个范围的时候,
总是含头不含尾的
6、String trim()
用于去除字符串两边的 "空白 "
空白指的是占位但看不到的字符
7、char charAt()
给定位置获取当前字符串中对应的字符
功能与 indexOf 反着
8、String startsWith()/endsWith()
判断一个字符串是否以给定的字符串开头或结尾
9、String toUpperCase()/toLowerCase()
英语大小写转换
10、 String String.valueOf(//i)
将基本类型数据转换为字符串。字符数组也可以