用replaceAll去掉身份证中的特殊符号

本文介绍了一种处理身份证号码的方法,通过正则表达式去除特殊字符,保留数字和字母X,确保了身份证号码的有效性和规范性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//去掉特殊符号 如500213719851119037X# 去掉# (保留X)

cardNo = cardNo.replaceAll("[^\\d|X]", "");


最后cardNo = 500213719851119037X
public List<ValidationResult> compareContent2(String pdfText, JsonNode jsonConfig) { List<ValidationResult> results = new ArrayList<>(); // 使用HanLP对文本进行分词 List<String> pdfTokens = HanLP.segment(pdfText).stream() .map(term -> term.word.replaceAll("\\s+", "").toLowerCase()) .collect(Collectors.toList()); System.out.println("分词的效果:"+pdfTokens); // 处理JSON结构对象/数组 JsonNode dataNode = jsonConfig.isArray() && jsonConfig.size() > 0 ? jsonConfig.get(0) : jsonConfig; // 高效遍历JSON字段 dataNode.fields().forEachRemaining(entry -> { String key = entry.getKey(); String value = entry.getValue().asText(); // 使用HanLP对JSON值进行分词 List<String> valueTokens = HanLP.segment(value).stream() .map(term -> term.word.replaceAll("\\s+", "").toLowerCase()) .collect(Collectors.toList()); if (!valueTokens.isEmpty()) { boolean found = pdfTokens.containsAll(valueTokens); results.add(new ValidationResult( "FIELD", key, String.join("", valueTokens), found ? "Found" : "Not Found", found )); } }); return results; }这个我的比较校验的方法这个是我的方法 public String extractContent(MultipartFile file) { String contentType = file.getContentType(); String fileName = file.getOriginalFilename().toLowerCase(); if (contentType == null) { return "不支持的文件类型: " + contentType; } if (fileName.endsWith(".pdf")) { return readPdfText(file); } return extractImageText(file); } /** * 读取PDF文本内容 * * @param file * @return */ public String readPdfText(MultipartFile file) { try (PDDocument doc = PDDocument.load(file.getInputStream())) { PDFTextStripper stripper = new PDFTextStripper(); // 设置行分隔符 stripper.setLineSeparator("\n"); // 设置字符间距 stripper.setSortByPosition(true); String rawText = stripper.getText(doc); System.out.println("pdf内容" + rawText); return rawText.trim(); } catch (Exception e) { return MessageUtils.message("file.read.pdf.error"); } } @PostConstruct public void initOcrEngine() { tesseract = new Tesseract(); //语言包路径和支持语言 tesseract.setDatapath("D:\\maven_use\\lingxi-lhc\\lingxi-ai-extend\\lingxi-ai-comparison\\src\\main\\resources\\tessdata"); tesseract.setLanguage("eng+chi_sim"); tesseract.setPageSegMode(6); //自动页面分割 tesseract.setOcrEngineMode(1); //LSTM引擎 } /** * OCR识别图片内容 */ private String extractImageText(MultipartFile file) { try (InputStream is = file.getInputStream()) { BufferedImage image = ImageIO.read(is); if (image == null) { return MessageUtils.message("Image.parsing.failed"); } //OCR识别 String result = tesseract.doOCR(image); result = postProcess(result); result = result.replaceAll("\\s+", " ").trim(); System.out.println("图片内容:\n" + result); return result; } catch (Exception e) { e.printStackTrace(); return MessageUtils.message("file.read.picture.error"); } } 我的pdf没有问题 我的ocr比较校验有问题
最新发布
07-22
`replaceAll()` 是 Java 中的一个字符串处理方法,主要用于将字符串中的特定字符或模式替换为另一个指定的字符或字符串。特别地,当涉及到特殊符号时,需要注意的是 `replaceAll()` 使用正则表达式作为其第一个参数来进行匹配。 这里有几个关键点需要了解: 1. **转义特殊字符**:因为 `replaceAll()` 的查找部分是一个正则表达式的模式,在这个上下文中某些符号有特殊的含义(例如 `.`、`\` 等),所以如果想要匹配实际的文字而不是它们在正则里的意思的话,则需要用反斜杠 `\` 来对这些特殊字符进行转义。然而由于Java本身也把 `\` 当做转义符看待,因此我们需要再加一次转义,即输入两个反斜杠 `\\` 才能表示一个真正的反斜杠用于转义下一个字符。 比如你想用 `replaceAll()` 把所有的句号变成问号: ```java String sentence = "Hello. How are you."; String result = sentence.replaceAll("\\.", "?"); ``` 2. **全部替换 vs 单次替换**:要注意区分 `replaceAll()` 和它的姐妹函数 `replaceFirst()` 或者直接使用的 `String.replace()`. 前两者基于正则表达式工作并且可以全局替代或者只替第一次出现的情况;而后者则是逐字节比较并完成整体取代,并不会解析传入的内容为正则语法。 3. **性能考量**:对于简单的单个字符替换任务来说,使用 `String.replace(char oldChar, char newChar)` 可能会比 `replaceAll(String regex, String replacement)` 更高效,因为它不需要构建完整的正则引擎实例来做更复杂的匹配操作。 下面的例子展示了如何利用 `replaceAll()` 函数去除所有非字母数字字符(假设我们想保留英文大小写字母及阿拉伯数位): ```java public class ReplaceAllExample { public static void main(String[] args) { // 定义含各种特殊字符在内的原始串 String originalText = "This@# is%^ a test! 1234"; // 移除非字母数字的所有内容 (使用了正则表达式) String cleanText = originalText.replaceAll("[^A-Za-z0-9]", ""); System.out.println("Original Text : " + originalText); System.out.println("Cleaned Text after replacing all special chars : " + cleanText); } } ``` 该程序运行的结果将会移除掉除了英文字母和阿拉伯数之外的一切其他符号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值