如何读取CSV二维整数数组并在指定区间生成随机数?
解决方案:读取CSV并生成区间随机数
核心思路
- 逐行读取CSV文件内容
- 拆分每行数据,提取前两个整数作为区间的下限(low)和上限(high)
- 针对每个区间生成包含上下限的随机整数(注意:
Random.nextInt(n)生成的是[0, n)的整数,需调整计算逻辑覆盖完整区间)
完整代码实现
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Random; public class CsvRandomGenerator { public static void main(String[] args) { String csvFilePath = "your_file_path.csv"; // 替换为你的CSV文件实际路径 Random random = new Random(); // 使用try-with-resources自动关闭文件流 try (BufferedReader br = new BufferedReader(new FileReader(csvFilePath))) { String line; while ((line = br.readLine()) != null) { String[] parts = line.split(","); // 确保每行至少有两个有效数值 if (parts.length >= 2) { try { int low = Integer.parseInt(parts[0].trim()); int high = Integer.parseInt(parts[1].trim()); // 生成[low, high]区间内的随机整数 int randomNum = random.nextInt(high - low + 1) + low; System.out.printf("区间[%d, %d]的随机数:%d%n", low, high, randomNum); } catch (NumberFormatException e) { System.err.println("行数据格式错误,无法转换为整数:" + line); } } else { System.err.println("行数据不足两个数值:" + line); } } } catch (IOException e) { System.err.println("读取CSV文件失败:" + e.getMessage()); } } }
代码细节说明
- 文件读取:用
BufferedReader逐行读取,结合try-with-resources语法确保文件流自动关闭,避免资源泄漏 - 数据解析:通过
split(",")拆分每行字符串,提取前两个元素并转换为整数,trim()处理可能存在的空格 - 随机数计算:
random.nextInt(high - low + 1)生成[0, high-low+1)范围的整数,加上low后刚好覆盖[low, high]的完整区间 - 异常处理:捕获文件读取异常、数值转换异常,输出明确错误信息,避免程序直接崩溃
复杂CSV场景优化
如果你的CSV存在带逗号的字段(如"1,2",3,4),推荐使用Apache Commons CSV库解析,示例片段:
// 需先引入Apache Commons CSV依赖 import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.File; // ... try (CSVParser parser = CSVParser.parse(new File(csvFilePath), CSVFormat.DEFAULT)) { for (CSVRecord record : parser) { if (record.size() >= 2) { int low = Integer.parseInt(record.get(0).trim()); int high = Integer.parseInt(record.get(1).trim()); int randomNum = random.nextInt(high - low + 1) + low; System.out.printf("区间[%d, %d]的随机数:%d%n", low, high, randomNum); } } }
内容的提问来源于stack exchange,提问作者Vaticani
相关产品推荐
相关产品推荐

