7 、(4分)Java带包文件的运行命令问题 问题描述: 在命令提示符窗口先运行Java程序,源文件需要先进行编译后再进行运行,编译和运行通过输入正确的编译和运行命令才能完成。在没有定义包信息的源文件(文件名与主类名相同)编译命令为“javac 带后缀名的文件名”,运行命令为“java 无后缀名的主类名”。如果主类定义了包,如"package p;",编译命令与无包源文件命令相同,但运行命令的参数需要提供主类所在包信息,包结构使用"."分隔,命令行为"java p.无后缀名的主类名",给你的问题是,根据输入行提供的Java源文件名和源文件包定义代码,使用一行输出该程序的运行命令。 输入: 标准输入,输入有多行,每行为一个Java源文件信息,包含源文件名称(主类名与文件名相同)和源文件的包定义语句信息,两信息数据之间由一个空字符分隔。 输出: 标准输出,根据输入行Java源文件数据信息,使用一行输出该行源文件编译成功后的运行命令,命令与参数之间使用一个空格。 输入样列: Test.java "package hhxy.jsj.enty;" Demo.java "package com.edu.service;" 输出样列: java hhxy.jsj.enty.Test java com.edu.service.Demo
时间: 2024-03-23 16:36:23 浏览: 67
根据输入行提供的Java源文件名和源文件包定义代码,使用一行输出该程序的运行命令。
Java中,如果主类定义了包,编译命令与无包源文件命令相同,但运行命令的参数需要提供主类所在包信息,包结构使用"."分隔,命令行为"java p.无后缀名的主类名"。
因此,根据输入行的源文件名和包定义,输出的运行命令为"java 包名.主类名",其中包名为包定义中的内容,主类名为不带后缀名的源文件名。具体实现方式如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] tokens = line.split(" ");
String fileName = tokens[0];
String packageDef = tokens[1];
String packageName = packageDef.substring(8, packageDef.length() - 1);
String className = fileName.substring(0, fileName.length() - 5);
System.out.println("java " + packageName + "." + className);
}
}
}
```
注意,上述实现中假设输入的第二个信息数据为包定义语句,且该语句的格式为"package 包名;",因此需要对该字符串进行处理,提取出其中的包名。同时,还需要注意去掉文件名中的后缀名,才能构造出正确的运行命令。
阅读全文