【Java】上机作业3报告


title: 【Java】上机作业报告3
categories:

  • Java
  • 学习
    tags:
  • Java
  • 学习

上机报告3

java第三次上机作业:

1、作业内容: 习题6-10,8-2。DDL:2020年11月17日23:59:59

2、报告格式: 将报告和程序一起打压缩包发送到████████████邮箱,压缩包必须命名为“上机作业3-学号-姓名”。 注:如果压缩包命名格式错误,会漏统计!


6-10

题目:实现一个类KeywoldIdentifier,读入一个.java文件,输出各个关键字的个数(注释中的不算)。

  • Java关键字如下:
关键字含义
abstract表明类或者成员方法具有抽象属性
assert断言,用来进行程序调试
boolean基本数据类型之一,声明布尔类型的关键字
break提前跳出一个块
byte基本数据类型之一,字节类型
case用在switch语句之中,表示其中的一个分支
catch用在异常处理中,用来捕捉异常
char基本数据类型之一,字符类型
class声明一个类
const保留关键字,没有具体含义
continue回到一个块的开始处
default默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do用在do-while循环结构中
double基本数据类型之一,双精度浮点数类型
else用在条件语句中,表明当条件不成立时的分支
enum枚举
extends表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float基本数据类型之一,单精度浮点数类型
for一种循环结构的引导词
goto保留关键字,没有具体含义
if条件语句的引导词
implements表明一个类实现了给定的接口
import表明要访问指定的类或包
instanceof用来测试一个对象是否是指定类型的实例对象
int基本数据类型之一,整数类型
interface接口
long基本数据类型之一,长整数类型
native用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
new用来创建新实例对象
package
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
return从成员方法中返回数据
short基本数据类型之一,短整数类型
static表明具有静态属性
strictfp用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754](https://baike.baidu.com/item/IEEE 754)算术规范
super表明当前对象的父类型的引用或者父类型的构造方法
switch分支语句结构的引导词
synchronized表明一段代码需要同步执行
this指向当前实例对象的引用
throw抛出一个异常
throws声明在当前定义的成员方法中所有需要抛出的异常
transient声明不用序列化的成员域
try尝试一个可能抛出异常的程序块
void声明当前成员方法没有返回值
volatile表明两个或者多个变量必须同步地发生变化
while用在循环结构中

先把Java关键字储存在keyword.txt中:

abstract
assert
boolean
break
byte
case
catch
char
class
const
continue
default
do
double
else
enum
extends
final
finally
float
for
goto
if
implements
import
instanceof
int
interface
long
native
new
package
private
protected
public
return
strictfp
short
static
super
switch
synchronized
this
throw
throws
transient
try
void
volatile
while

注意排除注释中的内容,有以下两种情况:

  • //开始\n结束

  • /*开始*/结束

另外

  • 注意"内的不是关键字

全部代码如下:

package regex;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Map;
import java.util.TreeMap;

public class homework_6_10 {

	public static void main(String[] args) throws IOException {
		keywordIdentifier sc = new keywordIdentifier();
        sc.keyWord();
        long filePoint = 0;
        String s;
        boolean inAnnotation = false; //是否在块注释内
        RandomAccessFile file = new RandomAccessFile("D:\\code\\Java-XDU\\java-book-code\\book-code\\chap06\\regex\\homework_6_10.java", "r");
        long fileLength = file.length();
        while(filePoint < fileLength) {
            s = file.readLine();
            s = s.replaceAll("\"(\\\\.|[^\\\\\"])*\"", " ");//去除引号内
            if(inAnnotation) {
            	if(s.indexOf("*/") != -1) {
            		s = s.substring(s.indexOf("*/"));
                	inAnnotation = false;
                }else {
                	s = "";
                }
            }
            if(s.indexOf("/*") != -1) {
            	if(s.indexOf("*/") != -1) {
                	s = s.substring(0,s.indexOf("/*")) + s.substring(s.indexOf("*/"));
                }else {
                	s = s.substring(0,s.indexOf("/*"));
                	inAnnotation = true;
                }
            }
            sc.keyWordCounter(s);
            filePoint = file.getFilePointer();
        }
        file.close();
        
        sc.output();
	}

}


class keywordIdentifier {

    private Map<String, Integer> keyWordCount = new TreeMap<String, Integer>();
    
    public void keyWord() throws IOException {
        long filePoint = 0;
        String s;

        RandomAccessFile file = new RandomAccessFile("D:\\code\\Java-XDU\\java-book-code\\book-code\\chap06\\regex\\keyword.txt", "r");
        long fileLength = file.length();
        while(filePoint < fileLength) {
            s = file.readLine();

            String[] s1 = s.split(" ");
            Integer freq = new Integer(0);
            for(String word : s1) {
                keyWordCount.put(word, freq);
            }
            
            filePoint = file.getFilePointer();
        }
        file.close();
    }
    
    public void keyWordCounter(String s){
        int pos = s.indexOf("//");
        if(pos == -1) {
            pos = s.length();
        }
        String sub = s.substring(0, pos);
        String sub1 = sub.replaceAll("\\W", " ");
        String sub2 = sub1.replaceAll(" +",  " ");
        String[] sArray = sub2.split(" ");
        Integer freq;
        for(String word : sArray) {
            freq = keyWordCount.get(word);
            if(freq != null) {
                freq = new Integer(freq.intValue() + 1);
                keyWordCount.put(word, freq);
            }
        }
    }
    
    public void output() {
        System.out.println(keyWordCount);
    }
    
}
/*
abstract
assert
boolean
break
*/

运行结果如下:

{abstract=0, assert=0, boolean=1, break=0, byte=0, case=0, catch=0, char=0, class=2, const=0, continue=0, default=0, do=0, double=0, else=2, enum=0, extends=0, final=0, finally=0, float=0, for=2, goto=0, if=6, implements=0, import=4, instanceof=0, int=1, interface=0, long=4, native=0, new=6, package=1, private=1, protected=0, public=5, return=0, short=0, static=1, strictfp=0, super=0, switch=0, synchronized=0, this=0, throw=0, throws=2, transient=0, try=0, void=4, volatile=0, while=2}

感觉还有其他的特殊情况没有进行排除

参考:

正则表达式匹配引号内字符串

文本统计器(Java)


8-2

题目:实现一个程序,该程序的输入是一个目录字符串和一个文件扩展名字符串,程序递归搜索该目录及各级子目录,查找与指定相同的文件,将这些文件的相对路径名记录下来并向控制台输出。

代码如下:

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class homework_8_2 {

	public static void main(String[] args) {
		FileFinder finder = new FileFinder();
		List<String> filenameList = new ArrayList<String>();
		
		Scanner scan = new Scanner(System.in);
        System.out.println("输入目录字符串:");
        String currentDir = scan.nextLine();
        System.out.println("输入文件扩展名字符串:");
        String filenameSuffix = scan.nextLine();
        scan.close();
        
//		String currentDir = "D:\\code\\Java-XDU\\java-book-code\\book-code";
//		String filenameSuffix = ".java";
		finder.findFiles(filenameSuffix, currentDir, filenameList);
		for (String filename : filenameList) {
			System.out.println(filename.substring(currentDir.length()+1));
		}
	}

}

class FileFinder {
	public void findFiles(String filenameSuffix, String currentDir, List<String> currentFilenameList) {
		File dir = new File(currentDir);
		if (!dir.exists() || !dir.isDirectory()) {
			return;
		}

		for (File file : dir.listFiles()) {
			if (file.isDirectory()) {
				findFiles(filenameSuffix, file.getAbsolutePath(), currentFilenameList);
			} else {
				if (file.getAbsolutePath().endsWith(filenameSuffix)) {
					currentFilenameList.add(file.getAbsolutePath());
				}
			}
		}
	}
}

输入:

输入目录字符串:
D:\code\Java-XDU\java-book-code\book-code
输入文件扩展名字符串:
.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1DM4f8AX-1605774299888)(上机作业3报告/image-20201117210339852.png)]

输出:

chap01\HelloWorld.java
chap02\ArrayCopy.java
chap02\ArrayLength.java
chap02\AssignConversion.java
chap02\BinaryConversion.java
chap02\BreakAndContinueWithLabel.java
chap02\CastRoundingNum.java
chap02\CharConst.java
chap02\EnhancedFor.java
chap02\homework\Homework_2_18.java
chap02\homework\Homework_2_19.java
chap02\homework\Homework_InsertionSort.java
chap02\homework\Homework_MergeSort.java
chap02\PrimitiveConst.java
chap02\ShiftRight.java
chap02\ShortCircuit.java
chap02\UnaryConversion.java
chap02\UnaryConversion2.java
chap02\VariablesAndLocalVarInit.java
chap03\Downcasting.java
chap03\homework\homework_3_2.java
chap03\homework\homework_3_3.java
chap03\homework\homework_3_9.java
chap03\ImportStatic.java
chap03\inheritance\ConstructSubObj.java
chap03\inheritance\ConstructSubObj2.java
chap03\inheritance\TestInheritance.java
chap03\InstanceInitializer.java
chap03\NotOverriding.java
chap03\overloading\AmbiguousOverloading.java
chap03\overloading\ConstructorOverloading.java
chap03\overloading\TestOverloading.java
chap03\PackageImport.java
chap03\ParameterPass.java
chap03\pkg1\A.java
chap03\pkg1\C.java
chap03\pkg2\PrivateVsPackage.java
chap03\pkg2\ProtectedVsPackageAndPublic.java
chap03\pkg2\PublicVsPackage.java
chap03\PolyConstructor.java
chap03\Rectangle.java
chap03\Rectangle2.java
chap03\ReturnedThis.java
chap03\shape\TestShapes.java
chap03\TestClone.java
chap03\TestEquals.java
chap03\Triangle.java
chap03\UnmaskField.java
chap03\VariousArgs.java
chap04\BlankFinals.java
chap04\FinalArgs.java
chap04\FinalVariables.java
chap04\InheritStaticInit.java
chap04\inner\AnonymousInner.java
chap04\inner\Book.java
chap04\inner\DotThis.java
chap04\inner\LocalInner.java
chap04\NewEnum.java
chap04\ProductFactory.java
chap04\SeasonChange.java
chap04\Sportsman.java
chap04\StaticInitialization.java
chap04\StaticPolymorphism.java
chap04\TestEnum.java
chap04\TestShapesAbsClass.java
chap04\TestShapesInterface.java
chap04\TestStaticInit.java
chap04\TestStaticMethod.java
chap05\CollectionWithForeach.java
chap05\TestCollection.java
chap05\TestComparable.java
chap05\TestEnumMap.java
chap05\TestEnumSet.java
chap05\TestIterator.java
chap05\TestListIterator.java
chap05\TestMap.java
chap05\TestPriorityQueue.java
chap05\TestQueue.java
chap05\TestSet.java
chap05\TestShapesArrayList.java
chap06\Autoboxing.java
chap06\Immutable.java
chap06\regex\homework_6_10.java
chap06\regex\MatchGroup.java
chap06\regex\PatternMatcherTest.java
chap06\regex\PatternSplit.java
chap06\regex\Replacement.java
chap06\regex\ScannerRegex.java
chap06\regex\StringMatch.java
chap06\regex\StringReplacement.java
chap06\regex\StringSplit.java
chap06\ScannerDemo.java
chap06\SimpleFormat.java
chap06\StringBuilderDemo.java
chap06\StringImmediate.java
chap06\StringTokenizerDemo.java
chap07\HelloWorld.java
chap07\ListOfNumbers.java
chap07\TestListOfNumbersDeclared.java
chap07\TestMyException.java
chap08\BufferedIO.java
chap08\DataInputEOF.java
chap08\DataIO.java
chap08\FileCopy.java
chap08\homework_8_2.java
chap08\nio\TestMappedByteBuffer.java
chap08\nio\TestNIO.java
chap08\nio\TestNIO2.java
chap08\nio\TestNIOSimple.java
chap08\RandomAccessFileDemo.java
chap08\RenameFile.java
chap08\SerializeDate.java
chap08\StandardIO.java
chap08\UnSerializeDate.java
chap10\AddAccount.java
chap10\AddAccountSync.java
chap10\CountDown.java
chap10\CountDown2.java
chap10\CountDown3.java
chap10\CountDown4.java
chap10\GetLockAgain.java
chap10\PipedIO.java
chap10\producerconsumer\AccountProducerConsumer.java
chap10\TestJoin.java
chap10\TestStop.java
chap11\LocalHost.java
chap11\NetworkResolver.java
chap11\TCPClient.java
chap11\TCPServer.java
chap11\UDPClient.java
chap11\UDPServer.java
chap11\URLParse.java
chap11\URLRetrieve.java
chap11\URLRetrieve2.java

参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
NC6系列UAP语义模型技术红皮书 第一章 前言 4 1.1 概念 5 1.2 定位 5 第二章 结构 6 2.1 应用模型 7 2.2 语义模型 7 2.2.1 定义形态 7 2.2.2 执行流程 9 2.2.3 数据形态 10 2.3 语义提供者 10 2.3.1 接口 11 2.3.2 扩展 14 2.4 函数 17 2.4.1 函数解析 17 2.4.2 函数扩展 17 2.5 参数 20 2.5.1 参数定义 20 2.5.2 参数引用 20 2.5.3 参数设置 20 2.5.4 参照依赖 21 2.5.5 自定义参照 21 2.6 宏变量 22 2.7 描述器 23 2.8 数据加工 24 2.8.1 概念 24 2.8.2 定位 24 2.8.3 执行原理 25 2.8.4 使用 25 2.8.5 常见问题 27 2.9 物化策略 27 2.10 复合语义模型 27 2.10.1 设计向导方式 28 2.10.2 语义脚本方式 29 2.11 语义上下文 31 2.12 脚本规则 31 2.12.1 实现规则类 32 2.12.2 配置文件注册 32 2.12.3 操作使用 33 第三章 语义模型管理 35 3.1 对象管理 36 3.1.1 目录管理 36 3.1.2 语义模型管理 37 3.1.3 监控 37 3.1.4 权限 38 3.1.5 全局变量配置 38 3.2 环境配置 39 3.3 导入导出 41 3.3.1 导出逻辑 41 3.3.2 导入逻辑 43 第四章 功能扩展 47 4.1 扩展语义提供者 48 4.2 扩展业务函数 48 4.3 使用数据加工 48 4.4 自定义执行策略 48 4.5 业务规则扩展 49 4.6 元定义驱动扩展 49 4.6.1 接口 50 4.6.2 实现 50 4.6.3 配置文件 50 4.6.4 使用 51 第五章 范例 52 5.1 脚本中引用参数范例 53 第六章 附录 57 6.1 入门 58 6.2 语义模型API 63 6.3 语义函数 65 6.4 其他函数 65 6.5 脚本引擎 66 6.6 针对查询引擎的改进 67 6.7 性能监控 67 6.8 多语言支持 68
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

框架主义者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值