Java DO WHILE循环处理手机号前导0失效问题求助
问题解决:保留手机号最后7位的前导0
你的问题根源在于用int类型存储数字会丢失前导0——整数类型本身不保留前导无效0,当输入0123456时,nextInt()会将其解析为123456,这个值小于1000000,触发循环条件导致无法通过验证。
解决方案:改用字符串存储并验证
用String类型接收输入可以完整保留前导0,同时通过规则验证确保输入是7位纯数字。修改后的代码如下:
import java.util.Scanner; public class PhoneCode { static Scanner keyboard = new Scanner(System.in); public static void main(String[] args) { String phoneNum; do { System.out.print("请输入您的手机号最后7位数字: "); phoneNum = keyboard.nextLine().trim(); // 验证条件:必须是7位,且全部为数字 } while (phoneNum.length() != 7 || !phoneNum.matches("\\d+")); System.out.println(phoneNum); } }
代码说明
trim():去除输入前后的空格,避免用户误输入空格导致长度不符合要求phoneNum.length() != 7:确保输入恰好是7位字符phoneNum.matches("\\d+"):通过正则验证输入的每一位都是数字,避免非数字字符输入- 用
String存储可以完整保留前导0,完美满足需求
如果后续需要将字符串转为数值类型(比如计算),可以使用Long.parseLong(phoneNum)(7位数字在int范围内,但long更安全,避免位数扩展时溢出)。
内容的提问来源于stack exchange,提问作者Zaisk
相关产品推荐
相关产品推荐

