一、题目需求从键盘输入一串纯数字判断输入内容是否为合法手机号自定义号段规则仅允许 137、138、139 开头手机号总长度固定为 11 位。题目没有强制限定实现方式我自主拓展正则表达式完成匹配校验作为程序优化亮点。二、完整解题思路1. 基础需求拆解输入部分使用Scanner工具类读取控制台输入的字符串基础校验规则整体长度必须等于 11 位前三位只能是 137、138、139剩余 8 位必须全部是数字输出逻辑符合规则输出「合法手机号」不满足任意一条则输出「号码错误」。2. 两种实现思路对比思路一基础 if 分段判断不借助正则纯字符串基础方法实现校验步骤判断字符串长度是否等于 11截取前 3 位子串判断是否等于137/138/139循环截取后 8 位每一个字符判断是否全部为数字全部满足则号码合法任一条件不满足直接判定错误。优点逻辑直白、新手易理解缺点代码冗长多层 if 嵌套拓展新号段时修改麻烦。思路二正则表达式匹配自主拓展优化亮点Java 字符串自带matches()方法支持正则全局匹配一行代码完成全部规则校验。正则表达式解析^1[3789]\\d{8}$^匹配字符串开头保证第一位固定为 1[3789]第二位只能是 3、7、8、9组合出 137/138/139 开头\\d{8}匹配 8 个 0-9 数字补足 11 位总长$匹配字符串结尾杜绝多余字符。优点代码极度简洁校验规则集中在一处后续新增号段仅修改正则即可缺点需要理解正则语法属于课本之外自主拓展知识点。3. 程序完整执行流程导入java.util.Scanner实现控制台输入主方法内创建 Scanner 对象提示用户输入手机号读取输入字符串调用matches()结合正则完成一次性校验根据匹配布尔结果打印对应提示关闭 Scanner 释放输入流资源。三、完整示例代码方案二 自主拓展正则版四、运行测试说明以截图测试用例137000举例输入仅 6 位长度不足 11正则匹配失败控制台输出「号码错误」和运行截图结果完全一致。五、实验心得体会1. 基础知识点收获本次程序练习巩固了 Java 字符串操作、Scanner 控制台输入、分支判断等基础语法。最开始我先用多层 if 判断完成基础功能完全贴合题目无额外要求的原始解法能清晰拆分长度、号段、数字三层校验逻辑吃透了substring()截取、charAt()取字符、字符串长度判断等基础 API。2. 自主拓展正则的学习亮点感悟题目没有规定实现方式我主动查阅资料引入正则表达式作为优化方案是本次实验最大收获正则把多条分散的校验规则整合到一行表达式代码量大幅精简可读性更高原本二三十行的多层 if 判断压缩为一句matches()匹配维护成本大幅降低拓展号段时修改成本极低如果后续新增 130、131 号段只需要修改[3789]为[301789]不用新增多层 if 条件学会了^、$、\\d、字符集合这类基础正则语法理解了 Java 中转义符需要双反斜杠\\的特殊规则掌握了字符串matches()全局匹配的底层逻辑属于课本之外主动拓展的实用工具知识。3. 踩坑调试总结正则书写失误最初漏写^和$边界符输入13812345678999超长数字也会判定合法补上首尾匹配符后才严格限制整体长度转义符错误直接写\d编译器报错Java 字符串中反斜杠需要二次转义必须写成\\d输入容错问题使用next()读取输入遇到空格会截断后续可以优化为nextLine()适配带空格的异常输入资源释放写完校验逻辑后差点忘记sc.close()养成关闭 IO 输入流、释放资源的良好编码习惯。4. 整体学习感悟这道手机号校验题虽然逻辑简单但让我体会到同一需求存在多种实现方案基础 if 适合新手理解底层逻辑正则适合工程化简洁开发。在题目无强制限制的前提下主动拓展正则表达式不仅简化了代码还自主学习了新知识点。编程不只是完成题目要求更可以主动思考优化方案在基础需求之上拓展更高效、易维护的写法长期坚持这种思路能大幅提升代码编写能力。同时调试过程中遇到的正则语法 bug、长度判断漏洞也锻炼了自己排查问题、查阅资料解决问题的自主学习能力。