数字文件转换为sql中的查询IN语句
如
11111
22222
33333
转换为
in ('11111','22222','33333')
执行操作
package com.hand.demo;
import java.io.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* @author : author
* @date 2023/6/15 10:33
*/
public class Demo9 {
private static final String INPUT_FILE_PATH = "D:\\test\\test.txt";
private static final String OUTPUT_FILE_PATH = "D:\\test\\output.txt"; // 使用不同文件避免覆盖
public static void main(String[] args) {
List<String> numbers = readNumbersFromFile(INPUT_FILE_PATH);
if (numbers.isEmpty()) {
System.out.println("未找到符合条件的数据");
return;
}
String result = formatNumbers(numbers);
writeResultToFile(OUTPUT_FILE_PATH, result);
}
/**
* 从文件中读取符合规则的数字列表
*/
private static List<String> readNumbersFromFile(String filePath) {
List<String> numbers = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
line = line.trim();
if (!line.isEmpty() && isNumeric(line)) {
numbers.add(line);
}
}
} catch (IOException e) {
System.err.println("读取文件时发生错误:" + e.getMessage());
}
return numbers;
}
/**
* 将数字列表格式化为指定格式的字符串
*/
private static String formatNumbers(List<String> numbers) {
StringBuilder sb = new StringBuilder("IN (");
for (int i = 0; i < numbers.size(); i++) {
sb.append("'").append(numbers.get(i)).append("'");
if (i < numbers.size() - 1) {
sb.append(",");
}
}
sb.append(")");
return sb.toString();
}
/**
* 将结果写入文件
*/
private static void writeResultToFile(String filePath, String content) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) {
bw.write(content);
} catch (IOException e) {
System.err.println("写入文件时发生错误:" + e.getMessage());
}
}
/**
* 判断字符串是否为纯数字且长度至少为3
*/
public static boolean isNumeric(String input) {
if (input == null || input.isEmpty()) {
return false;
}
// 简化判断逻辑,直接使用字符判断代替正则表达式
if (input.length() < 3) {
return false;
}
try {
new BigInteger(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}