Java 如何阅读每一行,然后找到丢失的文档?
输入格式示例:Java 如何阅读每一行,然后找到丢失的文档?,java,python,Java,Python,输入格式示例: Name of the file, Author, format type, id, content length. resume, abc, pdf, 7, 90 resume, asc, doc, 2, 90 resume, azc, docx, 3, 90 输出: 缺少文档格式 pdf 2,3 doc 7,
Name of the file, Author, format type, id, content length.
resume, abc, pdf, 7, 90
resume, asc, doc, 2, 90
resume, azc, docx, 3, 90
输出:
缺少文档格式
pdf
2,3
doc
7,3
以下是我的方法:从外部txt文件获取输入(必需)
File File=new文件(“//Users//Downloads//test\u cases//input.txt”);
ArrayList al=新的ArrayList()//创建新的通用arraylist
BufferedReader br=新的BufferedReader(新文件读取器(文件));
字符串st;
而((st=br.readLine())!=null)
新增(st);
br.close();
所以,我的问题是哪种数据结构适合使用?读完每一行。我还应该如何存储数据?一个示例代码将非常有帮助。提前谢谢 您可以使用hashmaps存储数据,其中键作为格式,ID作为值。如果您想使用python,下面是一个示例:
# Read line from file
with open('filename.txt') as f:
line = f.readline()
entries = line.split(' ')
# Hashmap to store formats and corresponding ids
formats = {}
# set to store all the ids
ids = set()
for en in entries:
vals = en.split(',')
frmt, identifier = vals[2], vals[3]
# Set of ids for each format
if frmt not in formats:
formats[frmt] = set()
formats[frmt].add(identifier)
ids.add(identifier)
print("Missing formats")
for frmt in formats:
print(frmt)
# Missing formats are set difference between all the ids and the current ids
print(ids-formats[frmt])
解决方案的前提是“格式类型”字段中的条目中只有一个值 此解决方案需要使用google guava collection。JAR可从“”下载
您希望如何访问数据。例如,访问每一行中的数据或通过列方式访问数据。您需要哪种语言的解决方案?首选Java。
# Read line from file
with open('filename.txt') as f:
line = f.readline()
entries = line.split(' ')
# Hashmap to store formats and corresponding ids
formats = {}
# set to store all the ids
ids = set()
for en in entries:
vals = en.split(',')
frmt, identifier = vals[2], vals[3]
# Set of ids for each format
if frmt not in formats:
formats[frmt] = set()
formats[frmt].add(identifier)
ids.add(identifier)
print("Missing formats")
for frmt in formats:
print(frmt)
# Missing formats are set difference between all the ids and the current ids
print(ids-formats[frmt])
import java.io.BufferedReader;
import java.io.File;
import java.lang.reflect.Array;
import java.util.*;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
public class FileReader {
public void processData() {
Multimap dataMap = readFile();
dataMap.get("format type");
Object[] array = ((ArrayListMultimap) dataMap).get("format type").toArray();
System.out.println("Missing formats");
for (Object entry:array) {
System.out.println(entry.toString().trim());
String position= "";
for(int i=0;i<array.length;i++) {
if(!entry.toString().equalsIgnoreCase (array[i].toString())) {
position= position+" "+i;
}
}
System.out.println(position);
}
}
public Multimap readFile() {
File file = new File("/Users/sree/Desktop/text.txt");
Multimap<String,String> dataMap = ArrayListMultimap.create();
ArrayList<String> al=new ArrayList<String>();
BufferedReader br;
try {
br = new BufferedReader(new java.io.FileReader(file));
Arrays.stream(br.readLine().split(",")).forEach(s ->al.add(s.trim()));
String st;
while ((st = br.readLine()) != null) {
VariableIcrementor instance = new VariableIcrementor();
Arrays.stream(st.split(",")).
forEach(s->dataMap.put(al.get(instance.increment()),s));
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return dataMap;
}
public static void main(String[] args) {
FileReader instance = new FileReader();
instance.processData();
}
}
public class VariableIcrementor {
private int i=0;
public int increment() {
return i++;
}
}