import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Map<String, List<Integer>> map = new HashMap(); int n = 0; List<String> lines = new ArrayList<>(); while (true) { String line = in.nextLine(); if (line.equals("!!!!!")) break; n++; lines.add(line); String[] words = line.split(" "); for (String word : words) { if (map.containsKey(word)) { if (map.get(word).contains(n)) continue; map.get(word).add(n); } else { List<Integer> index = new ArrayList<>(); index.add(n); map.put(word, index); } } } List<Map.Entry<String, List<Integer>>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, Comparator.comparing(Map.Entry::getKey)); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } while (true) { String[] keys = in.nextLine().split(" "); List<List<Integer>> index = new ArrayList<>(); for (int i = 0; i < keys.length; i++) { for (int j = 0; j < list.size(); j++) { if (list.get(j).getKey().equals(keys[i])) { index.add(list.get(j).getValue()); } } } if (index.size() == 0) { System.out.println("found 0 results"); continue; } List<Integer> result = index.get(0); if (keys.length >= 2) { for (int i = 1; i < index.size(); i++) { result.retainAll(index.get(i)); } if (result.size()==0){ System.out.println("found 0 results"); continue; } } System.out.println(result); for (int i : result) { System.out.println("line "+i+":"+lines.get(i-1)); } } } }
时间: 2024-02-15 20:27:19 浏览: 18
这是一段 Java 代码,它实现了一个简单的文本搜索功能。用户可以输入多行文本,程序会将每个单词与所在的行数存储在一个 HashMap 中。用户可以输入多个关键词,程序会返回包含所有关键词的行号。如果没有找到任何匹配,程序会输出 "found 0 results"。如果找到了匹配的行,程序会输出行号和具体的文本内容。
相关问题
import java.io.*; import java.util.Arrays; import java.util.Scanner; public class FileTest { public static void main(String[] args) throws IOException { // 接收给定的一行字符串 Scanner scanner = new Scanner(System.in); String line = scanner.nextLine();
// 创建文件对象,并检查文件是否存在 File file = new File(line); if (!file.exists()) { System.out.println("文件不存在!"); return; } // 读取文件内容 BufferedReader reader = new BufferedReader(new FileReader(file)); String content = ""; String temp; while ((temp = reader.readLine()) != null) { content += temp + "\n"; } // 关闭文件读取器 reader.close(); // 输出文件内容 System.out.println("文件内容:\n" + content); } }
这段代码是一个读取文件并输出文件内容的Java程序。首先,通过Scanner接收用户输入的文件路径,然后判断文件是否存在。如果文件不存在,则输出提示信息并结束程序。如果文件存在,则创建文件读取器并读取文件内容,将读取到的内容存储在一个字符串变量中。最后,关闭文件读取器并输出文件内容。
import java.util.*; import java.util.Collections; public class Test01 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); List<Integer> list=new ArrayList<>(); for(int i=0;i<list.size();i++) list.add(scanner.nextInt()); Collection.sort(list); } }
在你的代码中,你导入了`java.util.*`和`java.util.Collections`,这是正确的。然而,在调用`Collections.sort(list)`时出现了问题。
问题在于你使用了错误的类名。正确的方法是`Collections.sort(list)`而不是`Collection.sort(list)`。
请将代码中的`Collection.sort(list)`更改为`Collections.sort(list)`,然后重新尝试运行。这样应该就能够正确地对列表进行排序了。
以下是修正后的代码示例:
```java
import java.util.*;
import java.util.Collections;
public class Test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
for (int i = 0; i < list.size(); i++)
list.add(scanner.nextInt());
Collections.sort(list);
}
}
```
请注意,你还需要在读取输入值之前确定列表的大小,否则列表将始终为空。可以使用`list.size()`来获取列表的大小,并且在循环之前添加元素。