...
 
Commits (4)
    https://gitcode.net/SilentSamsara/personalproject-java-late/-/commit/fb6ebbd261852e5b4f96c31f3b5d697cf1efb416 作业提交 2022-03-14T22:58:30+08:00 5+? 200606289@qq.com https://gitcode.net/SilentSamsara/personalproject-java-late/-/commit/a8018980d1356a587511c865fe867913ea72b374 删除 pom.xml 2022-03-14T23:00:21+08:00 5+? 200606289@qq.com https://gitcode.net/SilentSamsara/personalproject-java-late/-/commit/9e24975650e5b68f9f1d40fdbf4a245b5d081766 作业提交 2022-03-14T23:32:15+08:00 5+? 200606289@qq.com https://gitcode.net/SilentSamsara/personalproject-java-late/-/commit/cbebad4b6bfbd047053a0bb5b184865a35ca395f Merge branch 'master' into 'master' 2022-03-16T19:22:45+08:00 SilentSamsara 1449755675@qq.com 221900127伍佳敏 See merge request <a href="/SilentSamsara/personalproject-java-late/-/merge_requests/9" data-original="SilentSamsara/personalproject-java-late!9" data-link="false" data-link-reference="false" data-project="107676" data-merge-request="48841" data-project-path="SilentSamsara/personalproject-java-late" data-iid="9" data-mr-title="221900127伍佳敏" data-reference-type="merge_request" data-container="body" data-placement="top" title="" class="gfm gfm-merge_request">!9</a>
*.class
*.log
*.lock
*.xml
target/
META-INF/
out/
test/
# idea
.idea/
*.iml
### IntelliJ IDEA ###
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
*.zip
*.class
*.exe
*.project
## 如何运行:
以命令行参数传入输入指令和输出文件,在cmd中进入文件目录后输入
>*Java -jar OlympicSearch.jar input.txt output.txt*
即可运行
## 功能简介:
### 1.输出奖牌总榜
当input.txt的内容为
>total
则会输出截止**22年2月20日**冬奥会奖牌总榜到output.txt,输出格式如下; 其中**rank1,rank2, ... ,rankn**对应具体排名国家英语简写,**number**为统计出的个数, 换行使用'\n',编码统一使用UTF-8。
输出格式
>rank1:string
gold:number
silver:number
bronze:number
total:number
\-----
...
输出样例
>rank1:NOR
gold:9
silver:6
bronze:7
total:22
\-----
rank2:GER
gold:8
silver:5
bronze:2
total:15
\-----
### 2.输出每日赛程
当input.txt的内容为
>schedule 0215
则会输出**2月15日**的赛程到**output.txt**,输出格式如下; 其中**time**对应比赛时间,**sport**为比赛项目大项, **name**为比赛名称,如为对抗赛赛事请加上出战国家。格式如**homename VS awayname****venue** 表示比赛地点。
**homename****awayname**为本次作业中提供json数据的字段名称。
输出格式:
>time:hh:mm
sport:string
name:string
venue:string
\-----
...
输出样例:
>time:09:05
sport:冰壶
name:女子冰壶循环赛第10轮 加拿大VS美国
venue:国家游泳中心
\-----
time:09:52
sport:单板滑雪
name:单板滑雪女子大跳台决赛第2轮
venue:首钢滑雪大跳台
\-----
假如输入无法处理的指令,例如:
1. 无法识别的指令,则输出Error
2. schedule后的日期并不在冬奥期间,则输出N/A
输入样例:
>totol
schedule 0222
total
输出样例:
>Error
\-----
N/A
\-----
rank1:NOR
gold:9
silver:6
bronze:7
total:22
\-----
rank2:GER
gold:8
silver:5
bronze:2
total:15
\-----
...
\-----
## 作业链接
[https://bbs.csdn.net/topics/604903684](https://bbs.csdn.net/topics/604903684)
\ No newline at end of file
## Java源文件的命名规则
JAVA源文件名必须和源文件中所定义的类的类名相同。
## Package的命名
Package名的第一部分是小写ASCII字符,并且是顶级域名之一,通常是com、edu、gov、mil、net、org或由ISO标准3166、1981定义的国家唯一标志码。Package名的后续部分由各组织内部命名规则决定,内部命名规则指定了各组件的目录名,所属部门名、项目名等。
## Class/Interface的命名
Class名是首字母大写的名词。命名时使其简洁而又具有描述性。异常类的命名以Exception结尾。Interface的命名规则与Class相同。
## 常量的命名
常量名的字母全部大写,不同的单词之间通过下划线进行连接,并且名字组合要赋予含义。
## 变量的命名
### 1. 普通变量
普通变量名的首字母小写,其它每个单词的首字母大写。命名时使其简短而又有特定含义,简洁明了的向使用者展示其使用意图。
### 2. 约定变量
所谓约定变量,是指那些使用后即可抛弃(throwaway)的临时变量。通常i、j、k、m和n代表整型变量;c、d和e代表字符型变量。
### 3. 方法的命名
方法名的第一个单词是动词,并且首字母小写,其它每个单词首字母大写。
### 4. 方法参数的命名
选择有意义的名称作为方法的参数名。如果可能的话,选择和需要赋值的字段一样的名字。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.util.HashMap;
interface search{
public void readTxtFile();
public String doSearch(String str);
public String readJsonFile(String fileName);
public void output(String str);
public void clearInfoForFile();
}
class OlySearch implements search{
//input.txt文件路径
String inputPath;
//output.txt文件路径
String outputPath;
File inputFile;
File outputFile;
HashMap<String,String> hashMap=new HashMap<>();
int flag=0;
//变量初始化,自动调用函数功能
OlySearch(String inPath,String outPath){
inputPath=inPath;
outputPath=outPath;
inputFile=new File(inputPath);
outputFile=new File(outputPath);
try {
if (outputFile.isFile()) {
clearInfoForFile();
readTxtFile();
}
else{
outputFile.createNewFile();
clearInfoForFile();
readTxtFile();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
//读取input.txt中的内容
public void readTxtFile(){
try {
String encoding="utf-8";
String ss=null;
//File file=new File(inputPath);
if(inputFile.isFile() && inputFile.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(inputFile),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while((lineTxt = bufferedReader.readLine()) != null){
//System.out.println(lineTxt);
//通过input.txt中的输入读取json文件
doSearch(lineTxt);
//return lineTxt;
}
BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(outputFile)));
String content="";
while((ss=reader.readLine())!=null){
content+=ss+"\r\n";
}
clearInfoForFile();
flag=1;
content = content.trim();
output(content);
//output(content.substring(0,content.length()-2));
read.close();
}else{
System.out.println("找不到input的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
//根据input.txt的内容实现查找
public String doSearch(String str){
String s;
str=str.trim();
if(str.equals("total")) {
if(hashMap.get("total")!=null&&!hashMap.get("total").isEmpty()){
s=hashMap.get("total");
}
else{
//使用函数readJsonFile()
s = readJsonFile("src/data/total.json");
hashMap.put("total",s);
}
JSONObject jobj = JSON.parseObject(s);
//再获取一次内部的JSONObject
JSONObject data = jobj.getJSONObject("data");
//创建JSONArray数组
JSONArray medals = data.getJSONArray("medalsList");
//通过循环获取json中的各个值
for (int i = 0; i < medals.size(); i++) {
JSONObject key = (JSONObject) medals.get(i);
String rank = (String) key.get("rank");
String countryid = (String) key.get("countryid");
String gold = (String) key.get("gold");
String silver = (String) key.get("silver");
String bronze = (String) key.get("bronze");
String count = (String) key.get("count");
output("rank" + rank + ":" + countryid);
output("gold" + ":" + gold);
output("silver" + ":" + silver);
output("bronze" + ":" + bronze);
output("total" + ":" + count);
output("-----");
}
//System.out.println(medals.size());
//System.out.println(s);
return "total";
}
else if(str.length()==13) {
if (str.substring(0, 8).equals("schedule")) {
//获取日期
String date = str.substring(9, 13);
//判断日期是否在冬奥会期间
if (Integer.parseInt(date) >= 202 && Integer.parseInt(date) <= 220) {
if (hashMap.get(date) != null && !hashMap.isEmpty()) {
s = hashMap.get(date);
} else {
//使用函数readJsonFile()
s = readJsonFile("src/data/" + date + ".json");
hashMap.put(date, s);
}
JSONObject jobj = JSON.parseObject(s);
//再获取一次内部的JSONObject
JSONObject data = jobj.getJSONObject("data");
//创建JSONArray数组
JSONArray matches = data.getJSONArray("matchList");
//通过循环获取json中的各个值
for (int i = 0; i < matches.size(); i++) {
JSONObject key = (JSONObject) matches.get(i);
String startdatecn = (String) key.get("startdatecn");
String itemcodename = (String) key.get("itemcodename");
String title = (String) key.get("title");
String homename = (String) key.get("homename");
String awayname = (String) key.get("awayname");
String venuename = (String) key.get("venuename");
output("time:" + startdatecn.substring(11, 16));
output("sport:" + itemcodename);
if (homename.equals("") || awayname.equals("")) {
output("name:" + title);
} else {
output("name:" + title + " " + homename + "VS" + awayname);
}
output("venue:" + venuename);
output("-----");
}
return "schedule";
}
else {
output("N/A");
output("-----");
return "N/A";
}
}
else{
output("Error");
output("-----");
return "Error";
}
}
else if(str.length()>9&&str.substring(0,9).equals("schedule ")){
String date=str.substring(9,str.length()).trim();
try{
if(Integer.parseInt(date)>=202&&Integer.parseInt(date)<=220) {
if (hashMap.get(date) != null && !hashMap.isEmpty()) {
s = hashMap.get(date);
} else {
//使用函数readJsonFile()
s = readJsonFile("src/data/" + date + ".json");
hashMap.put(date, s);
}
JSONObject jobj = JSON.parseObject(s);
//再获取一次内部的JSONObject
JSONObject data = jobj.getJSONObject("data");
//创建JSONArray数组
JSONArray matches = data.getJSONArray("matchList");
//通过循环获取json中的各个值
for (int i = 0; i < matches.size(); i++) {
JSONObject key = (JSONObject) matches.get(i);
String startdatecn = (String) key.get("startdatecn");
String itemcodename = (String) key.get("itemcodename");
String title = (String) key.get("title");
String homename = (String) key.get("homename");
String awayname = (String) key.get("awayname");
String venuename = (String) key.get("venuename");
output("time:" + startdatecn.substring(11, 16));
output("sport:" + itemcodename);
if (homename.equals("") || awayname.equals("")) {
output("name:" + title);
} else {
output("name:" + title + " " + homename + "VS" + awayname);
}
output("venue:" + venuename);
output("-----");
}
return "schedule";
}
else{
output("N/A");
output("-----");
return "N/A";
}
}
catch (Exception e){
output("N/A");
output("-----");
return "N/A";
}
}
else if(str.equals("")){
return "Error";
}
else{
output("Error");
output("-----");
return "Error";
}
}
//读取JSON文件数据
public String readJsonFile(String fileName){
String jsonStr = "";
try {
File jsonFile = new File(fileName);
if(jsonFile.isFile() && jsonFile.exists()) {
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
}
else{
System.out.println("找不到json的文件");
return "fail";
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
//输出至output.txt
public void output(String str){
try {
//File file = new File("src/main/resources/data/output.txt");
//File file = new File(outputPath);
FileOutputStream fos = new FileOutputStream(outputFile, true);
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(str);
if(flag==0)
bw.newLine();
bw.flush();
bw.close();
osw.close();
fos.close();
}catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e2) {
System.out.println("output输入错误!");
e2.printStackTrace();
}
}
//清空上次运行后output.txt中的数据
public void clearInfoForFile(){
File file =new File(outputPath);
try {
if(!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter =new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class OlympicSearch {
public static void main(String[] args) {
//读取input.txt
//String filePath = "src/data/input.txt";
//清空上次运行的输出
//clearInfoForFile("src/data/output.txt");
//readTxtFile(filePath);
//调用接口实现功能,给出input.txt和output.txt的路径
try{
//search doSearch=new OlySearch("1.txt","2.txt");
search doSearch=new OlySearch(args[0],args[1]);
}
catch (Exception e){
System.out.println("控制台输入有误!");
e.printStackTrace();
}
//System.out.println(args[0]+" "+args[1]);
}
}
{
"data": {
"total": 4,
"matchList": [
{
"homeid": "CURXTEAM2---SWE01",
"h5pageid": "",
"statusname": "结束",
"itemcode": "CUR-------------------------------",
"subitemname": "混合双人",
"id": "OGMM164249724307010092",
"vrtotalurl": "",
"enddatecn": "2022-02-02 22:00:00",
"albumurl": "",
"title": "混双循环赛第1轮",
"vrlivecode": "",
"deletedflag": "0",
"documentcode": "CURXTEAM2-------------PREL000101--",
"totaltitle": "",
"imageurl": "",
"vrliveurl": "",
"pageid": "curling01",
"startdatecn": "2022-02-02 20:05:00",
"venuename": "国家游泳中心",
"subitemcode": "CURXTEAM2-------------------------",
"awayid": "CURXTEAM2---GBR01",
"totalguid": "",
"status": "FINISHED",
"combatflag": "0",
"lockflag": "0",
"mvlivecode": "",
"homename": "瑞典",
"liveurl": "",
"awayname": "英国",
"reserve3": "",
"venue": "NAC",
"awayscore": "9",
"reserve2": "",
"homecode": "SWE",
"reserve1": "startlist",
"vrtotalcode": "",
"homescore": "5",
"livecode": "",
"itemcodename": "冰壶",
"totalurl": "",
"mvliveurl": "",
"awaycode": "GBR",
"adcode": "",
"medal": ""
},
{
"homeid": "CURXTEAM2---AUS01",
"h5pageid": "",
"statusname": "结束",
"itemcode": "CUR-------------------------------",
"subitemname": "混合双人",
"id": "OGMM164249724310010093",
"vrtotalurl": "",
"enddatecn": "2022-02-02 22:00:00",
"albumurl": "",
"title": "混双循环赛第1轮",
"vrlivecode": "",
"deletedflag": "0",
"documentcode": "CURXTEAM2-------------PREL000102--",
"totaltitle": "",
"imageurl": "",
"vrliveurl": "",
"pageid": "curling01",
"startdatecn": "2022-02-02 20:05:00",
"venuename": "国家游泳中心",
"subitemcode": "CURXTEAM2-------------------------",
"awayid": "CURXTEAM2---USA01",
"totalguid": "",
"status": "FINISHED",
"combatflag": "0",
"lockflag": "0",
"mvlivecode": "",
"homename": "澳大利亚",
"liveurl": "",
"awayname": "美国",
"reserve3": "",
"venue": "NAC",
"awayscore": "6",
"reserve2": "",
"homecode": "AUS",
"reserve1": "startlist",
"vrtotalcode": "",
"homescore": "5",
"livecode": "",
"itemcodename": "冰壶",
"totalurl": "",
"mvliveurl": "",
"awaycode": "USA",
"adcode": "",
"medal": ""
},
{
"homeid": "CURXTEAM2---NOR01",
"h5pageid": "",
"statusname": "结束",
"itemcode": "CUR-------------------------------",
"subitemname": "混合双人",
"id": "OGMM164249724312910094",
"vrtotalurl": "",
"enddatecn": "2022-02-02 22:00:00",
"albumurl": "",
"title": "混双循环赛第1轮",
"vrlivecode": "",
"deletedflag": "0",
"documentcode": "CURXTEAM2-------------PREL000103--",
"totaltitle": "",
"imageurl": "",
"vrliveurl": "",
"pageid": "curling01",
"startdatecn": "2022-02-02 20:05:00",
"venuename": "国家游泳中心",
"subitemcode": "CURXTEAM2-------------------------",
"awayid": "CURXTEAM2---CZE01",
"totalguid": "",
"status": "FINISHED",
"combatflag": "0",
"lockflag": "0",
"mvlivecode": "",
"homename": "挪威",
"liveurl": "",
"awayname": "捷克",
"reserve3": "",
"venue": "NAC",
"awayscore": "7",
"reserve2": "",
"homecode": "NOR",
"reserve1": "startlist",
"vrtotalcode": "",
"homescore": "6",
"livecode": "",
"itemcodename": "冰壶",
"totalurl": "",
"mvliveurl": "",
"awaycode": "CZE",
"adcode": "",
"medal": ""
},
{
"homeid": "CURXTEAM2---CHN01",
"h5pageid": "",
"statusname": "结束",
"itemcode": "CUR-------------------------------",
"subitemname": "混合双人",
"id": "OGMM164249724315910095",
"vrtotalurl": "",
"enddatecn": "2022-02-02 22:00:00",
"albumurl": "",
"title": "混双循环赛第1轮",
"vrlivecode": "",
"deletedflag": "0",
"documentcode": "CURXTEAM2-------------PREL000104--",
"totaltitle": "",
"imageurl": "",
"vrliveurl": "",
"pageid": "curling01",
"startdatecn": "2022-02-02 20:05:00",
"venuename": "国家游泳中心",
"subitemcode": "CURXTEAM2-------------------------",
"awayid": "CURXTEAM2---SUI01",
"totalguid": "",
"status": "FINISHED",
"combatflag": "0",
"lockflag": "0",
"mvlivecode": "",
"homename": "中国",
"liveurl": "",
"awayname": "瑞士",
"reserve3": "",
"venue": "NAC",
"awayscore": "6",
"reserve2": "CHN",
"homecode": "CHN",
"reserve1": "startlist",
"vrtotalcode": "",
"homescore": "7",
"livecode": "",
"itemcodename": "冰壶",
"totalurl": "",
"mvliveurl": "",
"awaycode": "SUI",
"adcode": "",
"medal": ""
}
]
}
}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
{
"data": {
"total": 29,
"medalsList": [
{
"bronze": "13",
"rank": "1",
"count": "37",
"silver": "8",
"countryname": "挪威",
"gold": "16",
"countryid": "NOR"
},
{
"bronze": "5",
"rank": "2",
"count": "27",
"silver": "10",
"countryname": "德国",
"gold": "12",
"countryid": "GER"
},
{
"bronze": "2",
"rank": "3",
"count": "15",
"silver": "4",
"countryname": "中国",
"gold": "9",
"countryid": "CHN"
},
{
"bronze": "7",
"rank": "4",
"count": "25",
"silver": "10",
"countryname": "美国",
"gold": "8",
"countryid": "USA"
},
{
"bronze": "5",
"rank": "5",
"count": "18",
"silver": "5",
"countryname": "瑞典",
"gold": "8",
"countryid": "SWE"
},
{
"bronze": "4",
"rank": "6",
"count": "17",
"silver": "5",
"countryname": "荷兰",
"gold": "8",
"countryid": "NED"
},
{
"bronze": "4",
"rank": "7",
"count": "18",
"silver": "7",
"countryname": "奥地利",
"gold": "7",
"countryid": "AUT"
},
{
"bronze": "5",
"rank": "8",
"count": "14",
"silver": "2",
"countryname": "瑞士",
"gold": "7",
"countryid": "SUI"
},
{
"bronze": "14",
"rank": "9",
"count": "32",
"silver": "12",
"countryname": "俄罗斯奥运队",
"gold": "6",
"countryid": "ROC"
},
{
"bronze": "2",
"rank": "10",
"count": "14",
"silver": "7",
"countryname": "法国",
"gold": "5",
"countryid": "FRA"
},
{
"bronze": "14",
"rank": "11",
"count": "26",
"silver": "8",
"countryname": "加拿大",
"gold": "4",
"countryid": "CAN"
},
{
"bronze": "9",
"rank": "12",
"count": "18",
"silver": "6",
"countryname": "日本",
"gold": "3",
"countryid": "JPN"
},
{
"bronze": "8",
"rank": "13",
"count": "17",
"silver": "7",
"countryname": "意大利",
"gold": "2",
"countryid": "ITA"
},
{
"bronze": "2",
"rank": "14",
"count": "9",
"silver": "5",
"countryname": "韩国",
"gold": "2",
"countryid": "KOR"
},
{
"bronze": "2",
"rank": "15",
"count": "7",
"silver": "3",
"countryname": "斯洛文尼亚",
"gold": "2",
"countryid": "SLO"
},
{
"bronze": "4",
"rank": "16",
"count": "8",
"silver": "2",
"countryname": "芬兰",
"gold": "2",
"countryid": "FIN"
},
{
"bronze": "0",
"rank": "17",
"count": "3",
"silver": "1",
"countryname": "新西兰",
"gold": "2",
"countryid": "NZL"
},
{
"bronze": "1",
"rank": "18",
"count": "4",
"silver": "2",
"countryname": "澳大利亚",
"gold": "1",
"countryid": "AUS"
},
{
"bronze": "0",
"rank": "19",
"count": "2",
"silver": "1",
"countryname": "英国",
"gold": "1",
"countryid": "GBR"
},
{
"bronze": "2",
"rank": "20",
"count": "3",
"silver": "0",
"countryname": "匈牙利",
"gold": "1",
"countryid": "HUN"
},
{
"bronze": "1",
"rank": "21",
"count": "2",
"silver": "0",
"countryname": "捷克",
"gold": "1",
"countryid": "CZE"
},
{
"bronze": "1",
"rank": "21",
"count": "2",
"silver": "0",
"countryname": "斯洛伐克",
"gold": "1",
"countryid": "SVK"
},
{
"bronze": "1",
"rank": "21",
"count": "2",
"silver": "0",
"countryname": "比利时",
"gold": "1",
"countryid": "BEL"
},
{
"bronze": "0",
"rank": "24",
"count": "2",
"silver": "2",
"countryname": "白俄罗斯",
"gold": "0",
"countryid": "BLR"
},
{
"bronze": "0",
"rank": "25",
"count": "1",
"silver": "1",
"countryname": "西班牙",
"gold": "0",
"countryid": "ESP"
},
{
"bronze": "0",
"rank": "25",
"count": "1",
"silver": "1",
"countryname": "乌克兰",
"gold": "0",
"countryid": "UKR"
},
{
"bronze": "1",
"rank": "27",
"count": "1",
"silver": "0",
"countryname": "波兰",
"gold": "0",
"countryid": "POL"
},
{
"bronze": "1",
"rank": "27",
"count": "1",
"silver": "0",
"countryname": "拉脱维亚",
"gold": "0",
"countryid": "LAT"
},
{
"bronze": "1",
"rank": "27",
"count": "1",
"silver": "0",
"countryname": "爱沙尼亚",
"gold": "0",
"countryid": "EST"
}
]
}
}
\ No newline at end of file