Java判断任意一个数是否是回文数的2种简单写法

第一种:把将要判断的数从尾部逆序依次取出并形成一个新的字符串,用新的字符串与原字符串进行比对即可。

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String s1 = "";
        for (int i = s.length()-1;i >= 0;i--){
            s1 += s.charAt(i);
        }
        System.out.println(s.equals(s1));
    }
}

第二种:利用StringBuilder的reverse()函数,该函数可直接将StringBuilder对象逆序。我们先将原StringBuilder对象转换成字符串1,再调用reverse()函数将新StringBuilder对象转换成字符串2,比较字符串1和2即可。

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder s = new StringBuilder(sc.next());
        String a = String.valueOf(s);
        String b = String.valueOf(s.reverse());
        System.out.println(a.equals(b));
    }
}
public class CharProcessor { // 私有构造方法,防止实例化 private CharProcessor() { throw new AssertionError("不能实例化工具类"); } // 计算字符串长度 public static int getLength(String text) { if (text == null) { return 0; } return text.length(); } // 判断是否包含大写字母 public static boolean hasUppercase(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isUpperCase(c)) { return true; } } return false; } // 判断是否包含小写字母 public static boolean hasLowercase(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isLowerCase(c)) { return true; } } return false; } // 判断是否包含字 public static boolean hasDigit(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isDigit(c)) { return true; } } return false; } // 判断是否包含特殊字符 public static boolean hasSpecialChar(String text) { if (text == null) { return false; } String specialChars = "!@#$%^&*()_+-=[]{}|;:,.<>?/"; for (char c : text.toCharArray()) { if (specialChars.indexOf(c) != -1) { return true; } } return false; } // 计算单词量 public static int countWords(String text) { if (text == null || text.trim().isEmpty()) { return 0; } String[] words = text.trim().split("\\s+"); return words.length; } // 反转字符串 public static String reverseString(String text) { if (text == null) { return null; } return new StringBuilder(text).reverse().toString(); } // 判断是否是回文字符串 public static boolean isPalindrome(String text) { if (text == null) { return false; } String cleaned = text.replaceAll("[^a-zA-Z0-9]", "").toLowerCase(); return cleaned.equals(reverseString(cleaned)); } // 统计字符出现次 public static int countChar(String text, char target) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (c == target) { count++; } } return count; } // 转换为驼峰命名 public static String toCamelCase(String text) { if (text == null || text.isEmpty()) { return text; } String[] words = text.split("[\\s_-]+"); StringBuilder result = new StringBuilder(words[0].toLowerCase()); for (int i = 1; i < words.length; i++) { if (!words[i].isEmpty()) { result.append(Character.toUpperCase(words[i].charAt(0))) .append(words[i].substring(1).toLowerCase()); } } return result.toString(); } // 判断字符串是否为空或null public static boolean isNullOrEmpty(String text) { return text == null || text.trim().isEmpty(); } // 去除所有空格 public static String removeAllSpaces(String text) { if (text == null) { return null; } return text.replaceAll("\\s+", ""); } // 统计大写字母量 public static int countUppercase(String text) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (Character.isUpperCase(c)) { count++; } } return count; } // 统计小写字母量 public static int countLowercase(String text) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (Character.isLowerCase(c)) { count++; } } return count; } } // 测试类 class CharProcessorTest { public static void main(String[] args) { String testString1 = "Hello World 123!"; String testString2 = "A man a plan a canal Panama"; String testString3 = "hello-world_example"; String testString4 = "上海自来水来自海上"; System.out.println("测试字符串1: " + testString1); System.out.println("长度: " + CharProcessor.getLength(testString1)); System.out.println("包含大写字母: " + CharProcessor.hasUppercase(testString1)); System.out.println("包含字: " + CharProcessor.hasDigit(testString1)); System.out.println("包含特殊字符: " + CharProcessor.hasSpecialChar(testString1)); System.out.println("单词量: " + CharProcessor.countWords(testString1)); System.out.println("反转: " + CharProcessor.reverseString(testString1)); System.out.println("大写字母量: " + CharProcessor.countUppercase(testString1)); System.out.println("小写字母量: " + CharProcessor.countLowercase(testString1)); System.out.println(); System.out.println("测试字符串2: " + testString2); System.out.println("是否是回文: " + CharProcessor.isPalindrome(testString2)); System.out.println("'a'出现次: " + CharProcessor.countChar(testString2.toLowerCase(), 'a')); System.out.println(); System.out.println("测试字符串3: " + testString3); System.out.println("驼峰命名: " + CharProcessor.toCamelCase(testString3)); System.out.println("去除空格: " + CharProcessor.removeAllSpaces(" hello world ")); System.out.println(); System.out.println("测试字符串4: " + testString4); System.out.println("是否是回文: " + CharProcessor.isPalindrome(testString4)); } }逐行解析代码的功能
最新发布
11-18
下面是对您提供的 Java 代码的**逐行解析**,详细说明每一行的功能、设计意图和潜在问题。 --- ```java public class CharProcessor { ``` > 定义一个名为 `CharProcessor` 的公共类,用于封装字符串处理相关的工具方法。 > 使用 `public` 表示该类可被其他包访问。 --- ```java // 私有构造方法,防止实例化 private CharProcessor() { throw new AssertionError("不能实例化工具类"); } ``` > 工具类不应被实例化。 > - `private` 构造器阻止外部创建对象(如 `new CharProcessor()`)。 > - 抛出 `AssertionError` 是一种“防御性编程”手段,即使通过反射调用也会失败。 > ✅ 防止误用,符合工具类设计规范(类似 `java.util.Collections`)。 --- ```java // 计算字符串长度 public static int getLength(String text) { if (text == null) { return 0; } return text.length(); } ``` > 提供安全获取字符串长度的方法。 > - 如果传入 `null`,返回 `0` 而不是抛出空指针异常。 > - 否则调用原生 `String.length()` 方法。 > ✅ 增强健壮性,避免 NPE。 --- ```java // 判断是否包含大写字母 public static boolean hasUppercase(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isUpperCase(c)) { return true; } } return false; } ``` > 检查字符串中是否有至少一个大写字母。 > - `text == null` → 返回 `false`。 > - `toCharArray()` 将字符串转为字符组进行遍历。 > - `Character.isUpperCase(c)` 判断是否是 Unicode 大写字母(支持国际化)。 > - 一旦找到即返回 `true`,效率高(短路判断)。 ✅ 可用于密码强度检测等场景。 --- ```java // 判断是否包含小写字母 public static boolean hasLowercase(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isLowerCase(c)) { return true; } } return false; } ``` > 类似上一个方法,但判断是否包含小写字母。 > 功能对称,逻辑一致。 --- ```java // 判断是否包含字 public static boolean hasDigit(String text) { if (text == null) { return false; } for (char c : text.toCharArray()) { if (Character.isDigit(c)) { return true; } } return false; } ``` > 检测字符串中是否含有字字符(0-9)。 > 使用 `Character.isDigit(c)` 是标准做法,兼容部分非 ASCII 字(如全角字需注意)。 --- ```java // 判断是否包含特殊字符 public static boolean hasSpecialChar(String text) { if (text == null) { return false; } String specialChars = "!@#$%^&*()_+-=[]{}|;:,.<>?/"; for (char c : text.toCharArray()) { if (specialChars.indexOf(c) != -1) { return true; } } return false; } ``` > 判断字符串是否包含预定义的“特殊字符”。 > - 定义了一个字符串常量 `specialChars` 包含常见符号。 > - 遍历每个字符,在 `specialChars` 中查找是否存在。 > ❗ 效率较低:`indexOf` 是 O(n),整体复杂度为 O(m×n)。 > ✅ 改进建议:使用 `Set<Character>` 或正则表达式提升性能。 --- ```java // 计算单词量 public static int countWords(String text) { if (text == null || text.trim().isEmpty()) { return 0; } String[] words = text.trim().split("\\s+"); return words.length; } ``` > 统计单词量。 > - `null` 或去除空格后为空 → 返回 `0`。 > - `trim()` 去除首尾空白。 > - `split("\\s+")` 使用正则按“一个或多个空白符”分割(包括空格、制表符、换行等)。 > ✅ 标准实现方式,适用于英文文本分词。 --- ```java // 反转字符串 public static String reverseString(String text) { if (text == null) { return null; } return new StringBuilder(text).reverse().toString(); } ``` > 反转字符串。 > - 输入 `null` 返回 `null`。 > - 使用 `StringBuilder.reverse()` 是最高效的方式(内部使用双指针交换字符)。 > ✅ 推荐写法。 --- ```java // 判断是否是回文字符串 public static boolean isPalindrome(String text) { if (text == null) { return false; } String cleaned = text.replaceAll("[^a-zA-Z0-9]", "").toLowerCase(); return cleaned.equals(reverseString(cleaned)); } ``` > 判断是否为回文串(正读反读相同),忽略大小写和非字母字字符。 > - 正则 `[^\w\d]` 替换为 "",只保留英文字母和字。 > - 转小写统一比较。 > - 调用之前定义的 `reverseString` 进行对比。 > ✅ 示例:"A man a plan..." → "amanaplanacanalpanama" → 回文。 > ⚠️ 缺点:创建新字符串两次(clean + reverse),空间开销大。 --- ```java // 统计字符出现次 public static int countChar(String text, char target) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (c == target) { count++; } } return count; } ``` > 统计目标字符在字符串中出现的次。 > - 简单循环计,时间复杂度 O(n)。 > - 对 `null` 返回 0。 > ✅ 清晰直观,适合小规模据。 --- ```java // 转换为驼峰命名 public static String toCamelCase(String text) { if (text == null || text.isEmpty()) { return text; } String[] words = text.split("[\\s_-]+"); StringBuilder result = new StringBuilder(words[0].toLowerCase()); for (int i = 1; i < words.length; i++) { if (!words[i].isEmpty()) { result.append(Character.toUpperCase(words[i].charAt(0))) .append(words[i].substring(1).toLowerCase()); } } return result.toString(); } ``` > 将用空格、下划线 `_`、连字符 `-` 分隔的字符串转换为 **lowerCamelCase**。 > - 正则 `[\\s_-]+` 匹配任意空白、`_` 或 `-` 作为分隔符。 > - 第一个词全小写,后续每个词首字母大写。 > ✅ 示例:"hello-world_example" → "helloWorldExample" > 📌 注意:若输入连续分隔符(如 `"a--b"`),`split` 会产生空字符串,所以需要检查 `!words[i].isEmpty()`。 --- ```java // 判断字符串是否为空或null public static boolean isNullOrEmpty(String text) { return text == null || text.trim().isEmpty(); } ``` > 判断字符串是否为 `null` 或“仅由空白组成”。 > ❗ 名称误导:实际行为是“是否为空白”(blank),而非传统意义上的“empty”。 > ✅ 更准确名称应为 `isNullOrBlank`。 > 🔁 区别: > - `isEmpty`: `""` → true, `" "` → false > - `isBlank`(Java 15+): `"", " "` → true --- ```java // 去除所有空格 public static String removeAllSpaces(String text) { if (text == null) { return null; } return text.replaceAll("\\s+", ""); } ``` > 删除字符串中所有的空白字符(空格、制表符、换行等)。 > - 使用正则 `\s+` 匹配所有空白并替换为空。 > ✅ 简洁有效,但会删除所有空白(不只是空格)。 --- ```java // 统计大写字母量 public static int countUppercase(String text) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (Character.isUpperCase(c)) { count++; } } return count; } ``` > 循环统计大写字母个。 > 与 `hasUppercase` 不同的是返回具体量而非布尔值。 --- ```java // 统计小写字母量 public static int countLowercase(String text) { if (text == null) { return 0; } int count = 0; for (char c : text.toCharArray()) { if (Character.isLowerCase(c)) { count++; } } return count; } ``` > 同理,统计小写字母量。 --- ## ✅ 测试类:`CharProcessorTest` ```java class CharProcessorTest { public static void main(String[] args) { ``` > 定义测试类,包含程序入口 `main` 方法。 --- ```java String testString1 = "Hello World 123!"; String testString2 = "A man a plan a canal Panama"; String testString3 = "hello-world_example"; String testString4 = "上海自来水来自海上"; ``` > 定义四个测试用例: > - `testString1`: 英文混合内容(含大小写、字、标点) > - `testString2`: 经典英文回文句 > - `testString3`: 用于驼峰命名测试 > - `testString4`: 中文回文(验证 Unicode 支持) --- ```java System.out.println("测试字符串1: " + testString1); System.out.println("长度: " + CharProcessor.getLength(testString1)); System.out.println("包含大写字母: " + CharProcessor.hasUppercase(testString1)); System.out.println("包含字: " + CharProcessor.hasDigit(testString1)); System.out.println("包含特殊字符: " + CharProcessor.hasSpecialChar(testString1)); System.out.println("单词量: " + CharProcessor.countWords(testString1)); System.out.println("反转: " + CharProcessor.reverseString(testString1)); System.out.println("大写字母量: " + CharProcessor.countUppercase(testString1)); System.out.println("小写字母量: " + CharProcessor.countLowercase(testString1)); System.out.println(); ``` > 输出 `testString1` 的各项分析结果,覆盖多个功能点。 --- ```java System.out.println("测试字符串2: " + testString2); System.out.println("是否是回文: " + CharProcessor.isPalindrome(testString2)); System.out.println("'a'出现次: " + CharProcessor.countChar(testString2.toLowerCase(), 'a')); System.out.println(); ``` > 测试回文判断和字符计功能。 --- ```java System.out.println("测试字符串3: " + testString3); System.out.println("驼峰命名: " + CharProcessor.toCamelCase(testString3)); System.out.println("去除空格: " + CharProcessor.removeAllSpaces(" hello world ")); System.out.println(); ``` > 测试命名转换和去空格功能。 --- ```java System.out.println("测试字符串4: " + testString4); System.out.println("是否是回文: " + CharProcessor.isPalindrome(testString4)); } } ``` > 最后测试中文回文,验证工具类对 Unicode 的良好支持。 --- ### ✅ 总结:逐行功能总结表 | 行号范围 | 功能 | |--------|------| | 1–3 | 定义公共类 `CharProcessor` | | 5–8 | 私有构造器防止实例化 | | 11–16 | 获取字符串长度(null 安全) | | 19–27 | 判断是否含大写/小写/字 | | 30–38 | 判断是否含特殊字符(性能可优化) | | 41–47 | 统计单词量(基于空白分割) | | 50–55 | 反转字符串(使用 StringBuilder) | | 58–64 | 判断是否为回文(忽略非字母字) | | 67–75 | 统计某字符出现次 | | 78–93 | 转换为 lowerCamelCase | | 96–99 | 判断是否为空或 null(实际为 isNullOrBlank) | | 102–107 | 删除所有空白字符 | | 110–124 | 统计大写/小写字母量 | | 127–end | 测试类输出各类示例 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值