实现思路
- 逐行读取大文本文件,避免一次性加载整个文件到内存。
- 使用正则表达式匹配每行中的ID值。
- 将匹配到的ID值转换为数字并累加到总和中。
关键代码片段
import java.io.BufferedReader
import java.io.FileReader
import java.util.regex.Pattern
fun main() {
val filePath = "large_text_file.txt"
var sum = 0L
val idPattern = Pattern.compile("ID: (\\d+)")
BufferedReader(FileReader(filePath)).use { reader ->
var line: String?
while (reader.readLine().also { line = it } != null) {
val matcher = idPattern.matcher(line!!)
if (matcher.find()) {
sum += matcher.group(1).toLong()
}
}
}
println("Sum of IDs: $sum")
}
正则表达式性能优化
- 预编译正则表达式:如代码中
Pattern.compile("ID: (\\d+)")
,将正则表达式编译为Pattern
对象,避免每次匹配都进行编译。
- 简化正则表达式:尽量使用简单的匹配规则,避免复杂的嵌套和回溯。这里
ID: (\\d+)
简洁地匹配ID值。
- 减少捕获组:仅保留必要的捕获组,这里只需要捕获ID值,所以只有一个捕获组。