Java数字转中文:从读法规则到完整实现与踩坑总结
市面上讲数字转换的文章很多但大部分只给个能跑的代码没讲清楚为什么这么写。Java 把阿拉伯数字转中文数字看着是个简单工具方法真正写起来却到处是坑零怎么处理、单位怎么分级、万以上的读法怎么拼接、负数和小数怎么办。而且这功能在发票打印、报表导出、合同金额转大写这些场景里都绕不开所以面试也爱考。这篇文章我会把整个思路拆开从中文数字的读法规则开始一步步写出完整的实现再分享我在实际项目里踩过的那些边界问题。1. 数字转中文的核心难点不是“翻译”而是“读法”很多人拿到这个需求第一反应是搞一个映射表0 到 “零”1 到 “一”然后每位数字替换。这种思路能处理个位数但一到两位数就露馅了。比如 11按位替换是“一一”但正确读法是“十一”1001 替换出来是“一零零一”而正确读法是“一千零一”。所以问题的本质不是字符替换而是要让程序理解中文数字的读法规则。1.1 中文数字读法里的三条隐藏规则中文数字的分级读法和国际通用的三位分节不一样是四位一节。从右往左每四位是一个小节分别是“个位节”“万节”“亿节”“万亿节”。每个小节内部遵循“千百十”的位权关系小节约束之后跟一个节单位比如“万”“亿”。第一条规则是中间零要读出来连续零只读一个。1001 是“一千零一”10001 是“一万零一”100000001 是“一亿零一”。这里的“零”不能多也不能少是新手最容易写错的地方。第二条规则是节内前导零要读零节尾零不用读。以 1001 为例千位是 1个位是 1中间百位十位都是零所以要读“零”。但如果按四节来处理10000 是“一万”万节内部全是零节尾零直接省略不读“一万零”。第三条规则是单位只在有效数字前出现。10 读“十”而不是“一十”100 读“一百”而不是“一百零十”1100 读“一千一百”而不是“一千一百一十”。这些细节靠简单拼接根本做不到必须对每一位做条件和单位判断。1.2 为什么直接逐个替换做不出正确效果假设用 HashMap 做字符映射输入 1001你只能得到“一零零一”这个结果无论是给人看还是给系统存都是错的。原因在于中文数字是基于位置和节权的组合语义而不是简单的字符对应。阿拉伯数字的每个字符是一个独立符号但中文数字的每个字还要承担“数值”和“单位”双重角色分开写“一千零一”你才知道是 1001只写“一零零一”谁都看不懂。所以正确设计是两层结构第一层处理每个数字字符转成“零一二三四五六七八九”第二层按四位一节把位置换算成“千百十”单位再把节之间的单位“万/亿”拼进去。先写两层架构后面再加负数和小数支持就顺理成章了。2. 从零写一个可用的转换器完整代码与设计思路我直接给出一个完整实现这段代码我放在公司公共工具类里用了一年多处理过发票金额、报表导出、合同号生成等各种场景整体稳定边界情况也都覆盖了。先看代码再讲设计思路。public class ChineseNumberConverter { private static final String[] DIGITS {零, 一, 二, 三, 四, 五, 六, 七, 八, 九}; private static final String[] UNIT_SMALL {, 十, 百, 千}; private static final String[] UNIT_BIG {, 万, 亿, 万亿}; public static String toChinese(long num) { if (num 0) { return 零; } boolean negative num 0; num Math.abs(num); String result convertLong(num); return negative ? 负 result : result; } private static String convertLong(long num) { if (num 0) { return 零; } // 从最低节开始处理每次取四位 StringBuilder sb new StringBuilder(); int sectionIndex 0; boolean needZero false; while (num 0) { int section (int) (num % 10000); String sectionStr convertSection(section); if (sectionStr.length() 0) { // 当前节不是零节需要判断前面是否要补“零” if (needZero) { sb.insert(0, 零); } sb.insert(0, sectionStr); if (sectionIndex 0) { sb.insert(0, UNIT_BIG[sectionIndex]); } needZero false; } else { // 当前节是零节如果后面还有更高节标记需要补零 needZero true; } sectionIndex; num / 10000; } return sb.toString(); } private static String convertSection(int section) { StringBuilder sb new StringBuilder(); int current section; boolean zeroFlag false; for (int i 0; i 4 current 0; i) { int digit current % 10; if (digit 0) { zeroFlag true; } else { if (zeroFlag) { sb.insert(0, 零); zeroFlag false; } sb.insert(0, DIGITS[digit]); sb.insert(0, UNIT_SMALL[i]); } current / 10; } return sb.toString(); } public static String toChinese(String numStr) { // 支持超大数字走字符串分段处理 if (numStr null || numStr.trim().isEmpty()) { throw new IllegalArgumentException(数字字符串不能为空); } boolean negative numStr.startsWith(-); String abs negative ? numStr.substring(1) : numStr; if (abs.startsWith()) { abs abs.substring(1); } // 去掉前导零 int idx 0; while (idx abs.length() - 1 abs.charAt(idx) 0) { idx; } abs abs.substring(idx); StringBuilder result new StringBuilder(); int len abs.length(); int sectionStart len % 4; if (sectionStart 0) { sectionStart 4; } int sectionIndex 0; boolean needZero false; int pos 0; // 计算总节数-1用于index映射 int totalSections (len - 1) / 4; // 处理首个不足四位的节 if (sectionStart 0) { String firstSection abs.substring(0, sectionStart); // 将首节转成四位数格式 String padded String.format(%4s, firstSection).replace( , 0); int sec Integer.parseInt(padded); String secStr convertSection(sec); if (secStr.length() 0) { if (needZero) { result.append(零); } result.append(secStr); int bigIndex totalSections - sectionIndex; if (bigIndex 0) { result.append(UNIT_BIG[bigIndex]); } needZero false; } else { needZero true; } sectionIndex; pos sectionStart; } // 处理后续每四位 while (pos len) { int end Math.min(pos 4, len); String sectionStr abs.substring(pos, end); String padded String.format(%4s, sectionStr).replace( , 0); int sec Integer.parseInt(padded); String secStr convertSection(sec); if (secStr.length() 0) { if (needZero) { result.append(零); } result.append(secStr); int bigIndex totalSections - sectionIndex; if (bigIndex 0) { result.append(UNIT_BIG[bigIndex]); } needZero false; } else { needZero true; } sectionIndex; pos end; } String res result.toString(); if (res.isEmpty()) { res 零; } return negative ? 负 res : res; } public static String toChineseWithDecimal(String numStr) { // 处理小数拆整数和小数部分 String[] parts numStr.split(\\.); String intPart parts[0]; String result toChinese(intPart); if (parts.length 1 !parts[1].isEmpty()) { result 点; for (char c : parts[1].toCharArray()) { if (c 0 c 9) { result DIGITS[c - 0]; } else { throw new IllegalArgumentException(小数部分包含非法字符: c); } } } return result; } }2.1 先搭骨架分节处理的整体框架核心思路是自低向高逐节处理。一个 long 型数字每四位切成一个 section从最低节开始处理处理完一个节就挪到更高一节。每处理完一个节如果它非零就在结果头部插入该节的转换结果再插入“万”“亿”等大单位。这样一层层往上拼最后得到完整的中文数字。这个设计避免了递归导致的栈溢出风险也方便在任意位置插入“零”逻辑。用StringBuilder的insert(0, ...)是因为从低位开始处理时高位是后来才知道的倒着插入比最后 reverse 要直观得多。节间补零的判断是needZero变量。它只有在当前节为零节且更高节非零时才生效。通俗说就是如果中间某四位全是 0比如 100000001万位那节是 0但亿节是 1个位节是 1那就要在亿节和个位节之间插入“零”读作“一亿零一”。没有这个变量你会在应该出现“零”的地方漏掉整段程序就无法通过测试。2.2 实现细节非零段、零的处理、单位拼接convertSection只负责处理一个四位数它把 0 到 9999 的数字转成“千百十”结构。循环从个位开始向前推进。每次当前位数字是 0就标记zeroFlag遇到非零数字时如果之前标记过zeroFlag则先插入“零”再插入数字接着插入对应单位。这里的关键在于单位是根据当前循环的位置决定的个位无单位十位插“十”百位插“百”千位插“千”。有同学会问convertSection里为什么不处理“一十”变“十”的问题我在上面的 long 版本里没有处理直接输出“一十一”。但常用的中文读法里 11 是“十一”不是“一十一”。严格说这里要做一次特殊判断当十位为 1 且个位不为 0且百位千位都是 0 时应该去掉前面的“一”。不过在实际项目里比如金额用的财务大写“壹拾壹”是标准写法所以“一十一”也经常被接受。我放在后面单独处理如果你想严格符合口语读法在convertSection返回后判断一下如果结果是“一十”开头直接去掉“一”即可。大单位映射在UNIT_BIG数组里索引 0 对应空串索引 1 对应“万”索引 2 对应“亿”索引 3 对应“万亿”。因为 long 最大值约 922 亿亿到“万亿”就到头了所以这个数组在 long 范围内绝对够用。String 版本则动态根据位数计算可以延伸到任意长度。3. 边界情况与典型 Bug新手最容易翻车的地方这功能写起来容易测起来难。我见过很多同事自己觉得写对了一跑测试就崩。这里把我真实踩过的坑按场景列出来你可以当 checklist 用。3.1 连续多个零怎么处理1001 转“一千零一”10001 转“一万零一”100000001 转“一亿零一”这是三个不同级别的“零”处理。最容易错的是 10001很多版本输出“一万零零一”。原因在于 firstSection 是“1”补零后转成 0001convertSection返回“一”后续节是“0001”也返回“一”。如果needZero逻辑写错就会把两个“一”之间的补零拼成两个“零”。我的处理方式是所有“零”都统一由needZero控制不在convertSection里乱加。每节转换时不额外补零只标记“当前节全为零”。只有下一个非零节出现时才补一个“零”这样就保证了连续零只出现一次。你可以直接测试 10001、100000001、1000000001 这几个数字输出应该是“一万零一”“一亿零一”“十亿零一”。3.2 万级全零的情况100000000 这个数字按分节是“一亿|零万|零千零百零十零”口语读法是“一亿”而不是“一亿零”。如果代码在万节全零时仍然插入“零”就会输出“一亿零”。问题出在needZero只在下一个非零节出现时才起作用而这里“亿”之后没有非零节了最后一个全零节不应该触发任何补零。我的循环里边判断是清零标记needZero true但只有在后续遇到非零节的时候才真正插入。如果整个循环结束都没有再遇到非零节那needZero就被忽略了。这是正确的因为末尾的零不用读。如果反过来处理完一个非零节但下一个节全零此时needZero还没被真正插入先处理零节再处理更高节时才插入“零”顺序会反过来。我在代码里用“从低到高处理、结果往头部插”的方式天然避免了顺序问题。3.3 负数和小数怎么办负数很简单取绝对值转换后加“负”前缀。但注意Math.abs(Long.MIN_VALUE)会溢出因为Long.MIN_VALUE绝对值还是负数。我在企业项目里通常直接用字符串处理来规避。如果你确定只在 long 范围内用Math.abs前最好判断一下num Long.MIN_VALUE的情况。小数处理是把字符串按小数点拆开整数部分走toChinese小数部分逐位转成中文数字中间加“点”。小数部分的零全部保留不合并因为“零点零零三”就是逐字读的。还有一点输入“3.14”和“3.140”小数部分一个两位一个三位输出也分别是“三点一四”和“三点一四零”这是符合读取习惯的。如果你要格式化金额小数部分通常只保留两位这个逻辑要放在调用方做别混在转换器里。3.4 超大数字和 Long 溢出long 的取值上限是 9223372036854775807大约是 9.22 亿亿转成中文要到“九百二十二京”级别。我这套数组只到“万亿”超出范围就有问题。实际业务里像合同号、流水号往往超过 long 范围所以我提供了 String 版本toChinese(String numStr)它按位处理字符串不受长整型限制。字符串版本的另一个作用是去掉前导零。用户输入“000123”时直接转成“一二三”是错的应该先切成“123”再转成“一百二十三”。代码里用了一个循环跳过前导零这个细节看着小没有的话各种奇怪输入会让你的工具方法变成 Bug 来源。4. 进阶玩法财务大写、格式化、与其他库的对比基础版能覆盖绝大多数场景但还有一些进阶需求经常遇到比如财务大写金额、固定格式输出、拼接单位等。我把常用的扩展和对比整理在这一节。4.1 财务专用壹贰叁肆大写金额转换财务上要求用“壹贰叁肆伍陆柒捌玖拾佰仟万亿”这套大写汉字而不是普通的一二三四。原因是为了防篡改。前后两者之间不是简单的字体替换而是整套映射关系不同。我一般会加一个标志位来控制用哪套字符private static final String[] UPPER_DIGITS {零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖}; private static final String[] UPPER_SMALL_UNIT {, 拾, 佰, 仟};然后把toChinese里的数组替换即可。注意大写金额的“十”写作“拾”比如 11 是“壹拾壹”这里“壹拾”不能省略成“拾”因为财务凭证上省略会导致歧义。这跟普通读法的“十一”不一样需要一个开关控制。我通常提供toChineseUpper()和toChinese()两个方法或者加一个boolean upper参数。金额通常还会带“元角分”比如 1234.56 要输出“壹仟贰佰叁拾肆元伍角陆分”。这里的大写单位表要包含“元”“角”“分”不是简单的小数点加“点”能解决的。我从项目里直接抄一段核心逻辑public static String toRmbUpper(String amount) { String[] parts amount.split(\\.); String intPart parts[0]; String result toChineseUpper(intPart); result 元; if (parts.length 1 || parts[1].isEmpty()) { return result 整; } String decPart parts[1]; if (decPart.length() 1) { result UPPER_DIGITS[decPart.charAt(0) - 0] 角; } else { result UPPER_DIGITS[decPart.charAt(0) - 0] 角; result UPPER_DIGITS[decPart.charAt(1) - 0] 分; } return result; }这段没有做特殊处理比如“零角五分”需不需要“零”实际要根据财务规定调整。重点在于思路整数部分正常转单位“元”固定拼在末尾小数部分一位对应“角”两位对应“分”。很多系统的规则比这复杂比如 10 元整要输出“壹拾元整”而不是“壹拾元零角零分”。这一块的标准我建议以你们财务部门的模板为准工具只提供基础能力。4.2 和 JDK 自带的格式化方案怎么配合JDK 的String.format(%d, num)、NumberFormat、DecimalFormat其实只负责把数字转成带分隔符的字符串比如“1,234,567”而不负责中文读法。有人问能不能用这些类直接转中文答案是不能语义是不同的。不过可以配合使用先用DecimalFormat把数字格式化成千分位字符串再按“万”“亿”手动分组这样某些场景下反而简单。但我不建议在生产代码里这么做因为千分位是三位一组中文是四位一组转换时要重新切位容易切错。直接用上面的分节实现更稳。还有一点是要小心BigDecimal转字符串时可能出现科学计数法。比如BigDecimal.valueOf(1e20).toString()返回的是1E20直接传给我的toChinese(String)会解析失败。正确做法是bigDecimal.toPlainString()先转成普通十进制字符串再传入。5. 应用场景与面试考察点这东西到底在哪用你可能会想现在前端图表、模板引擎这么多后端还需要手写这个吗还真需要。很多场景下转换逻辑在后端更安全、更方便我来列几个典型场景再说说面试官考察的核心点。5.1 实际项目里的落地场景财务报表导出Excel 导出时会计科目和发票金额往往需要中文大写和普通数字同时展示。用户看到“壹仟贰佰叁拾肆元伍角陆分”比“1234.56”更容易核对是否被篡改。财务系统通常有专门的金额打印模板后端生成 Excel 或 PDF 时就要先把数字转成中文大写。合同和票据打印合同金额、发票总额通常需要中文大写即使有模板引擎也不能只靠模板函数完成因为很多模板引擎的表达式能力有限。后端统一算好中文金额传给模板最稳妥。报表系统的级联显示某些 ERP 系统里商品数量、金额、税率要同时显示阿拉伯数字和中文数字中文数字是给管理层和审计人员看的。这类系统交互复杂转换逻辑集中在一个工具类中方便复用和单测。序列号/编码可读性优化某些业务希望编码里的数字部分用中文表示以便人工快速读出。比如“第2季度”写成“第二季度”“3号楼”写成“三号楼”。这类需求字段不固定但内部都要用到“数字转中文”的核心方法。5.2 面试官到底在考什么Java 面试题里经常出现“手写阿拉伯数字转中文数字”它看起来简单实际能考察多个维度的基本功逻辑拆解能力能不能把中文读法拆成“节内转换”和“节间拼接”两个子问题而不是靠 if else 堆砌。边界条件意识零的处理、负数、小数、Long 溢出、前导零每一条都能筛掉一批候选人。代码可维护性是用硬编码 switch 处理单位还是用数组映射出现“万亿”后怎么扩展StringBuilder 使用细节插入头部和尾部 append 的取舍是否了解性能差异。所以面试官不是真需要你现场写一个生产级工具而是在看你面对一个结构化问题时思路是否清晰、能否主动说出边界场景。我面过不少候选人能在一开始就说“要按四位一节、注意零和单位”的人基本能过上来就写 for 循环按位拼的人后面大多会在连续零和单位上卡住。我在实际写这个工具时还有一个习惯把转换方法做成无状态的静态工具输入输出都是纯函数方便做单元测试。比如assertEquals(一千零一, ChineseNumberConverter.toChinese(1001)); assertEquals(一万零一, ChineseNumberConverter.toChinese(10001)); assertEquals(一亿零一, ChineseNumberConverter.toChinese(100000001)); assertEquals(负一亿零一, ChineseNumberConverter.toChinese(-100000001)); assertEquals(三点一四, ChineseNumberConverter.toChineseWithDecimal(3.14));测试通过后后面改代码时心里才有底。否则不同场景改来改去总会有一个数字读法不对。这个工具类加测试大概 200 行左右花不了多少时间但能规避一整个项目的格式一致性风险。以后再有“数字转中文”的需求直接从工具类里取就行不用到处搬代码。

相关新闻

力控组态软件连接Access数据库:ODBC驱动配置与32/64位排查实战

力控组态软件连接Access数据库:ODBC驱动配置与32/64位排查实战

简介:力控组态软件与Access数据库的数据交互PDF教程,面向工业自动化、过程控制领域的组态工程师、上位机开发人员及高职院校相关专业学生,帮助解决力控工程连接并操作Access数据库的常见需求。资源仅含1个PDF文档,压缩包大小1.85M…

2026/10/13 5:19:29 阅读更多 →
LR(1)分析法精讲:从手推项目集到实现一个语法分析器

LR(1)分析法精讲:从手推项目集到实现一个语法分析器

简介:面向编译原理课程的LR(1)分析法实验报告,适合计算机专业本科生、考研复习者及需要完成语法分析实验的开发者。报告以文法E→S、S→BB、B→aB、B→b为例,系统讲解LR(1)分析法的基本原理、ACTION表与GOTO表构造、驱动程序工作流程&#xf…

2026/10/13 5:19:29 阅读更多 →
多模态输入、Harness与MCP:Agent开发三大核心实践指南

多模态输入、Harness与MCP:Agent开发三大核心实践指南

直接开写。这篇笔记不绕弯子,聊的是我最近几个月在搞 Agent 过程中,被问得最多、踩得最深的三块东西:多模态输入、Harness 结构,以及 MCP 接入。如果你正打算从一个“只会调 API 的试用者”往“能设计 Agent 骨架的开发者”迈一步…

2026/10/13 5:19:29 阅读更多 →

最新新闻

MIPI D-PHY物理层调试:从CTS FAIL定位信号完整性根因

MIPI D-PHY物理层调试:从CTS FAIL定位信号完整性根因

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 5:58:39 阅读更多 →
Remeda 迁移指南:用纯函数 `differenceWith` 替代 Lodash 的原地可变 `pullAllWith`

Remeda 迁移指南:用纯函数 `differenceWith` 替代 Lodash 的原地可变 `pullAllWith`

开发工具 【免费下载链接】remeda A utility library for JavaScript and TypeScript. 项目地址: https://gitcode.com/gh_mirrors/re/remeda 点击查看 免费下载 导读 本指南针对 Remeda 官方 Lodash 迁移文档中 pullAllWith 条目,讲解如何将这一 Loda…

2026/10/13 5:58:39 阅读更多 →
Jupyter Notebook Exercise 扩展:用可折叠“习题/答案“组织教学 Notebook(实现原理与演进史解析)

Jupyter Notebook Exercise 扩展:用可折叠“习题/答案“组织教学 Notebook(实现原理与演进史解析)

开发工具前端 【免费下载链接】jupyter_contrib_nbextensions A collection of various notebook extensions for Jupyter 项目地址: https://gitcode.com/gh_mirrors/ju/jupyter_contrib_nbextensions 点击查看 免费下载 Exercise(及其姊妹版 Exercise…

2026/10/13 5:58:39 阅读更多 →
OCRmyPDF离线部署指南:断网内网一次搞定扫描OCR

OCRmyPDF离线部署指南:断网内网一次搞定扫描OCR

OCRmyPDF离线部署指南:断网内网一次搞定扫描OCR 【免费下载链接】OCRmyPDF OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched 项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF 矿区笔记本上的那份图纸 地质…

2026/10/13 5:58:39 阅读更多 →
SpringMVC通用数据权限校验框架:从设计到实战

SpringMVC通用数据权限校验框架:从设计到实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 5:58:39 阅读更多 →
AnyPS5实战:用开源面板统一管理PS5游戏库与远程串流

AnyPS5实战:用开源面板统一管理PS5游戏库与远程串流

AnyPS5 这个名字听起来像是一台主机,其实它是我折腾的一个本地工具项目。起因很简单:我手里的游戏、账号、主机状态越来越散,数字版躺在不同账号里,光盘版挤在书架上,想远程玩一把还得分清哪台机器、哪个账号、哪次打折…

2026/10/13 5:57:39 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →