java 如何搜索
搜索方法
Java中搜索可以通过多种方式实现,包括字符串搜索、集合搜索、文件搜索等。以下介绍几种常见的搜索方法。
字符串搜索
使用String类的indexOf()方法可以查找子字符串在字符串中的位置。该方法返回子字符串首次出现的索引,若未找到则返回-1。
String str = "Hello, world!";
int index = str.indexOf("world"); // 返回7
contains()方法用于检查字符串是否包含指定子字符串,返回布尔值。
boolean result = str.contains("world"); // 返回true
集合搜索
在List或数组中搜索元素可以使用contains()方法或循环遍历。
List<String> list = Arrays.asList("apple", "banana", "cherry");
boolean exists = list.contains("banana"); // 返回true
对于自定义对象集合,需要重写equals()方法以确保正确比较。
class Fruit {
String name;
@Override
public boolean equals(Object obj) {
return name.equals(((Fruit)obj).name);
}
}
文件搜索
使用Files类的walk()方法可以递归遍历目录并搜索文件。
Path start = Paths.get("/path/to/directory");
Files.walk(start)
.filter(Files::isRegularFile)
.filter(p -> p.getFileName().toString().endsWith(".txt"))
.forEach(System.out::println);
高级搜索技术
正则表达式搜索

Pattern和Matcher类支持正则表达式搜索,适用于复杂模式匹配。
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("abc123");
boolean found = matcher.find(); // 返回true
数据库搜索
使用JDBC或JPA可以在数据库中执行搜索查询。
String sql = "SELECT * FROM users WHERE name LIKE ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "%John%");
ResultSet rs = stmt.executeQuery();
搜索引擎集成
对于大规模数据搜索,可以集成Elasticsearch或Solr等搜索引擎。

RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
SearchRequest request = new SearchRequest("users");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("name", "John"));
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
性能优化
二分搜索
对于已排序的数组,Arrays.binarySearch()提供O(log n)时间复杂度的搜索。
int[] numbers = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(numbers, 3); // 返回2
哈希表搜索
HashMap或HashSet提供O(1)平均时间复杂度的搜索。
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
int value = map.get("apple"); // 返回1
并行搜索
Java 8流式API支持并行搜索以利用多核处理器。
List<String> list = Arrays.asList("a", "b", "c");
boolean found = list.parallelStream().anyMatch("b"::equals);
注意事项
- 字符串搜索区分大小写,使用
toLowerCase()或toUpperCase()进行不区分大小写的搜索 - 集合搜索前确保正确实现
equals()和hashCode()方法 - 文件搜索时注意处理
IOException - 数据库搜索使用参数化查询防止SQL注入
- 搜索引擎集成需处理网络延迟和超时






