Java_SSD3_实验7《字符串和文本I/O 》


下面用到的知识请参考以下文章:

Java字符串String类的各知识点及其方法进阶版

Java文件输入输出PrintWriter和Scanner小结

Scanner工作机制——标记读取法 ,深入理解next()和nextline()的区别


一 ,实验目的

  1. String类中处理字符串方法的使用
  2. 从命令行传递参数给main方法的编程及运行
  3. 文件类及文件输入输出

二、实验内容

  1.【检测密码】一些网站设定了一些指定密码的规则。编写一个方法,检测一个字符串是否是合法的密码。假定密码规则如下:

  1. 密码必须至少有8个字符。
  2. 密码只能包括数字和字母。
  3. 密码必须至少有2个数字。

编写一个程序,提示用户输入密码,如果该密码符合规则就显示“Valid Password”,否则显示“Invalid Password”。

 

1.1实验结果与分析

1)测试数据一

分析:当输入有效密码时,程度运行结果正确

 

2)测试数据二

Java_SSD3_实验7《字符串和文本I/O 》_第1张图片

分析:当输入的密码错误时,程序会提醒用户重新输入

 

由以上测试结果可知,该程序完全符合实验要求。

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、回车或换行符分隔。文件名作为命令行参数传递。如下图所示:

Java_SSD3_实验7《字符串和文本I/O 》_第2张图片

2.1 实验结果与分析

1)测试数据一

文件中的测试数据:

输出结果:

Java_SSD3_实验7《字符串和文本I/O 》_第3张图片

2)测试数据二

文件中测试数据:

Java_SSD3_实验7《字符串和文本I/O 》_第4张图片

输出结果:

Java_SSD3_实验7《字符串和文本I/O 》_第5张图片

 

3)测试数据三

当文件不存在时,程序输出结果:

Java_SSD3_实验7《字符串和文本I/O 》_第6张图片

 

结果分析:

该程序所有测试数据都正确,完全符合实验要求。

 

2.2心得体会

 该程序要注意三个问题:

  1. IDEA中命令含参数添加的一个方法:在上方工具栏点击Run选项,点击Edit选项,在Program arguments栏输入命令行参数,即可
  2. 知晓Scanner工作机制,可以灵活运用Scanner的各种用法
  3. Java文件一般用相对路径,且同级目录是与src文件在同一级,也就是工程文件下的第一级。Java_SSD3_实验7《字符串和文本I/O 》_第7张图片

相关知识参考链接:

Java文件输入输出PrintWriter和Scanner小结

Scanner工作机制——标记读取法 ,深入理解next()和nextline()的区别

 

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时,程序输出结果为:

Java_SSD3_实验7《字符串和文本I/O 》_第8张图片

其中文件Exercise9_19.txt中数据为:

2)测试结果二

当文件存在时,程序输出结果为:

Java_SSD3_实验7《字符串和文本I/O 》_第9张图片

其中文件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));  
  
  
    }  
}  

 

你可能感兴趣的:(java)