下面用到的知识请参考以下文章:
Java文件输入输出PrintWriter和Scanner小结
Scanner工作机制——标记读取法 ,深入理解next()和nextline()的区别
一 ,实验目的
- String类中处理字符串方法的使用
- 从命令行传递参数给main方法的编程及运行
- 文件类及文件输入输出
二、实验内容
1.【检测密码】一些网站设定了一些指定密码的规则。编写一个方法,检测一个字符串是否是合法的密码。假定密码规则如下:
- 密码必须至少有8个字符。
- 密码只能包括数字和字母。
- 密码必须至少有2个数字。
编写一个程序,提示用户输入密码,如果该密码符合规则就显示“Valid Password”,否则显示“Invalid Password”。
1.1实验结果与分析
1)测试数据一
分析:当输入有效密码时,程度运行结果正确
2)测试数据二
分析:当输入的密码错误时,程序会提醒用户重新输入
由以上测试结果可知,该程序完全符合实验要求。
1.2心得体会
Java的字符串类有许多方便的方法,灵活运用可高效解题。
这个实验逐步判断输入密码是否满足要求即可
1.3源代码如下
package Lab7;
import java.util.Scanner;
/*1.【检测密码】一些网站设定了一些指定密码的规则。编写一个方法,检测一个字符串是否是合法的密码。假定密码规则如下:
密码必须至少有8个字符。
密码只能包括数字和字母。
密码必须至少有2个数字。
编写一个程序,提示用户输入密码,如果该密码符合规则就显示“Valid Password”,否则显示“Invalid Password”。
*/
public class Program1String {
public static boolean isValid(String s){
int len = s.length(),count_num=0;
if(len < 8)
return false;
for (int i = 0; i < len; i++) {
if(!Character.isDigit(s.charAt(i)) && !Character.isLetter(s.charAt(i)))
return false;
if(Character.isDigit(s.charAt(i)))
count_num++;
}
if(count_num <2 )
return false;
return true;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter a password:");
boolean flag = true;
while (flag)
{
String s = input.nextLine();
if(isValid(s))
{
System.out.println("Valid Password");
flag = false;
}
else
{
System.out.println("Invalid Password");
System.out.println("Please re-enter:");
}
}
}
}
2. 【统计一个字符中的字符数、单词数和行数】编写程序统计一个文件中的字符数(控制字符\r和\n除外)、单词数以及行数。单词由空格、Tab、回车或换行符分隔。文件名作为命令行参数传递。如下图所示:
2.1 实验结果与分析
1)测试数据一
文件中的测试数据:
输出结果:
2)测试数据二
文件中测试数据:
输出结果:
3)测试数据三
当文件不存在时,程序输出结果:
结果分析:
该程序所有测试数据都正确,完全符合实验要求。
2.2心得体会
该程序要注意三个问题:
- IDEA中命令含参数添加的一个方法:在上方工具栏点击Run选项,点击Edit选项,在Program arguments栏输入命令行参数,即可
- 知晓Scanner工作机制,可以灵活运用Scanner的各种用法
-
Java文件一般用相对路径,且同级目录是与src文件在同一级,也就是工程文件下的第一级。
相关知识参考链接:
2.3 源代码如下
package Lab7;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import static jdk.nashorn.internal.runtime.regexp.joni.Syntax.Java;
/*【统计一个字符中的字符数、单词数和行数】编写程序统计一个文件中的字符数(控制字符\r和\n除外)、单词数以及行数。
单词由空格、Tab、回车或换行符分隔。文件名作为命令行参数传递。如下图所示:
*/
public class Program2fileandmain {
public static void main(String[] args) throws FileNotFoundException {
File file = new File(args[0]);
String s ;
int count_word = 0, count_char = 0,count_line = 0;
try(
Scanner input = new Scanner(file);
){
while (input.hasNext()){
s = input.nextLine();
count_line++; //读取一行加一
count_char+= s.length();
Scanner temp = new Scanner(s); //在一行字符串中读取标记读取单词
String t ;
while (temp.hasNext()){
t = temp.next();
count_word++;
}
}
System.out.println(file.getName()+" has\n"
+"words:"+count_word+
"\ncharacters:"+count_char
+"\nLine:"+count_line
);
}
}
}
3.【读写数据】编写一个程序,如果名为Exercise9_19.txt的文件不存在,则创建该文件。使用文本I/O编写随机产生10个整数给文件。文件中的整数由空格分开。从文件中读回这些数据,然后显示排好序的数据。
3.1 实验结果及分析
1)测试结果一
当不存在文件Exercise9_19.txt时,程序输出结果为:
其中文件Exercise9_19.txt中数据为:
2)测试结果二
当文件存在时,程序输出结果为:
其中文件Exercise9_19.txt中数据为:
结果分析:在多种情况下,程序均运行正确,符合实验要求。
3.2心得体会
编程要养成这几个好习惯:要判断文件是否存在;使用PrintWriter和Scanner时,尽量使用try-with-sources。避免没必要的错误。
3.3源代码
package Lab7;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
/*.【读写数据】编写一个程序,如果名为Exercise9_19.txt的文件不存在,则创建该文件。
使用文本I/O编写随机产生10个整数给文件。文件中的整数由空格分开。从文件中读回这些数据,然后显示排好序的数据。
*/
public class Program3fileoi {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("Exercise9_19.txt");
if(!file.exists()){
System.out.println("没有找到该文件,创建一个Exercise9_19.txt文件:");
try(
PrintWriter output = new PrintWriter(file);
)
{
for (int i = 0; i < 10; i++) {
output.print((int)(Math.random() * 100));
output.print(" ");
}
}
}
int[] list = new int[10];
try (
Scanner input = new Scanner(file);
){
for (int i = 0; i < 10; i++) {
list[i] = input.nextInt();
}
}
Arrays.sort(list);
System.out.println("Exercise9_19.txt 文件中的数据排好序后为:");
System.out.println(Arrays.toString(list));
}
}