Java字符串反转问题求助:无法得到预期输出nadnahc.iar
问题分析与修正代码
原代码存在两处关键问题:
- 循环条件
i>0会跳过索引为0的字符,导致反转结果缺失第一个字符 - 代码逻辑是反转整个字符串,但你的需求是将
.分隔的前后两段分别反转后再拼接,因此逻辑不匹配
正确实现代码
实现思路
- 将原字符串按
.分割为前后两部分 - 分别反转这两个子字符串
- 用
.将反转后的子字符串拼接,得到最终结果
public class StringReverse { public static void main(String[] args) { String str = "chandan.rai"; System.out.println("Original word: " + str); // 按点分割字符串,注意转义 String[] parts = str.split("\\."); // 反转第一部分 String reversedFirst = reverseString(parts[0]); // 反转第二部分 String reversedSecond = reverseString(parts[1]); // 拼接结果 String rev = reversedFirst + "." + reversedSecond; System.out.println("Reversed word: " + rev); } // 通用的字符串反转方法 private static String reverseString(String s) { StringBuilder sb = new StringBuilder(s); return sb.reverse().toString(); } }
替代实现(不分割字符串的写法)
如果不想分割字符串,也可以直接定位.的位置,分别反转前后段:
public class StringReverse { public static void main(String[] args) { String str = "chandan.rai"; System.out.println("Original word: " + str); StringBuilder sb = new StringBuilder(); int dotIndex = str.indexOf('.'); // 反转点前面的部分 for (int i = dotIndex - 1; i >= 0; i--) { sb.append(str.charAt(i)); } // 添加点 sb.append('.'); // 反转点后面的部分 for (int i = str.length() - 1; i > dotIndex; i--) { sb.append(str.charAt(i)); } String rev = sb.toString(); System.out.println("Reversed word: " + rev); } }
输出结果
运行上述代码后,会得到预期的输出:
Original word: chandan.rai Reversed word: nadnahc.iar
内容的提问来源于stack exchange,提问作者chandan
相关产品推荐
相关产品推荐

