Java 从文件中提取具有最新版本的应用程序
有一个文件包含应用程序名称及其多个版本:(v1、v2、v3)只需打印具有最新版本(v3)和appname的文件 文件内容:Java 从文件中提取具有最新版本的应用程序,java,file,collections,Java,File,Collections,有一个文件包含应用程序名称及其多个版本:(v1、v2、v3)只需打印具有最新版本(v3)和appname的文件 文件内容: MailApp AuthenticationAPI v6 Videoapp CallAppAPI v7 MailApp DataStorageAPI v10 Videoapp DataStorageAPI v11 MailApp AuthenticationAPI v11 ChatApp DataStorageAPI v2 ChatApp DataStorageA
MailApp AuthenticationAPI v6
Videoapp CallAppAPI v7
MailApp DataStorageAPI v10
Videoapp DataStorageAPI v11
MailApp AuthenticationAPI v11
ChatApp DataStorageAPI v2
ChatApp DataStorageAPI v3
我编写了以下代码:
public class FileProblem {
public void readFile() {
try {
File file = new File("D:\\cucumber\\Versions.txt");
BufferedReader fos = new BufferedReader(new FileReader(file));
String sCurrentLine;
int i =0;
String temp;
ArrayList<String> ar = new ArrayList<String>();
Scanner s = new Scanner(file);
//List<String> names = new ArrayList<String>();
Iterator<String> itr = ar.iterator();
while ((sCurrentLine = fos.readLine()) != null) {
String[] arr = sCurrentLine.split(" ");
Map<String, String> hs = new TreeMap<String, String>();
//hs.put(arr[0], arr[2]);
hs.put(arr[0],arr[2]);
if(arr.length == 4) {
System.out.println("arr[3] = " + arr[3]);
}
Iterator<Entry<String, String>> itr1 = hs.entrySet().iterator();
while(itr1.hasNext()) {
System.out.println(itr1.next());
}
}
}
catch(Exception e) {
System.out.println(e);
}
}
public static void main(String args[]) {
FileProblem fp = new FileProblem();
fp.readFile();
}
}
公共类文件问题{
公共void readFile(){
试一试{
File File=新文件(“D:\\cumber\\Versions.txt”);
BufferedReader fos=新的BufferedReader(新文件读取器(文件));
弦电流线;
int i=0;
字符串温度;
ArrayList ar=新的ArrayList();
扫描仪s=新扫描仪(文件);
//列表名称=新的ArrayList();
迭代器itr=ar.Iterator();
而((sCurrentLine=fos.readLine())!=null){
字符串[]arr=sCurrentLine.split(“”);
Map hs=新树映射();
//hs.put(arr[0],arr[2]);
hs.put(arr[0],arr[2]);
如果(arr.length==4){
System.out.println(“arr[3]=”+arr[3]);
}
迭代器itr1=hs.entrySet().Iterator();
while(itr1.hasNext()){
System.out.println(itr1.next());
}
}
}
捕获(例外e){
系统输出打印ln(e);
}
}
公共静态void main(字符串参数[]){
FileProblem fp=新的FileProblem();
fp.readFile();
}
}
但是我一直坚持按值对HashMap进行排序,因为它包含带数字的字符串。请帮助假设您的文件除了版本号之外没有任何数字,您可以创建自己的比较器,如下所示:
Comparator<String> versionComparator =
Comparator.comparingDouble(s -> Double.valueOf(s.replaceAll("\\D+", "")));
现在就把它打印出来
map.forEach((key, value) -> System.out.println(value.orElse("Not Found")));
请将文件内容格式化为原始格式one@Ruslan更新的文件内容我刚刚更新了答案答案有意义吗?@Ruslan谢谢你的回复。我试图编译程序,但遇到了一个错误。另外,我使用的是java 7,所以我正在尝试使其正常工作,现在将java版本更新为8。错误:maxBy方法未定义
map.forEach((key, value) -> System.out.println(value.orElse("Not Found")));