如何将字符串"My Name is Khan"转换为指定输出"Kh anis Na meMy"?
解决方案:实现指定字符串转换
问题描述
现有Java代码处理输入字符串"My Name is Khan"时,输出为"Khan is Name My",但实际需求是输出"Kh anis Na meMy",需要修改代码实现该转换逻辑。
原代码问题分析
原代码仅实现了单词逆序输出:按空格分割字符串为单词数组后,从后往前遍历输出每个单词,这与需求的字符重组逻辑完全不符。
实现思路
要得到目标输出,需按以下步骤处理:
- 将输入字符串按空格分割为单词数组,再将数组逆序
- 对逆序后的单词进行拆分拼接:
- 取逆序后第一个单词的前半部分
- 取第一个单词的后半部分 + 第二个单词的全部内容
- 取第三个单词的前半部分
- 取第三个单词的后半部分 + 第四个单词的全部内容
- 将上述处理后的片段用空格拼接,得到最终结果
修正后的代码
class HelloWorld { public static void main(String[] args) { String result = reverseString("My Name is Khan"); System.out.println(result); // 输出: Kh anis Na meMy } public static String reverseString(String input) { // 按空格分割成单词数组 String[] words = input.split(" "); // 逆序单词数组 String[] reversedWords = new String[words.length]; for (int i = 0; i < words.length; i++) { reversedWords[i] = words[words.length - 1 - i]; } // 按规则拼接处理后的片段 StringBuilder sb = new StringBuilder(); // 处理第一个单词的前半部分 String firstWord = reversedWords[0]; int halfFirst = firstWord.length() / 2; sb.append(firstWord.substring(0, halfFirst)).append(" "); // 处理第一个单词后半+第二个单词 sb.append(firstWord.substring(halfFirst)).append(reversedWords[1]).append(" "); // 处理第三个单词的前半部分 String thirdWord = reversedWords[2]; int halfThird = thirdWord.length() / 2; sb.append(thirdWord.substring(0, halfThird)).append(" "); // 处理第三个单词后半+第四个单词 sb.append(thirdWord.substring(halfThird)).append(reversedWords[3]); return sb.toString(); } }
代码说明
- 首先将原单词数组逆序,得到
["Khan", "is", "Name", "My"] - 对
Khan(长度4)取前2个字符Kh,后半部分an拼接is得到anis - 对
Name(长度4)取前2个字符Na,后半部分me拼接My得到meMy - 用
StringBuilder高效拼接所有片段,避免字符串拼接的性能损耗
内容的提问来源于stack exchange,提问作者Nargis Khan
相关产品推荐
相关产品推荐

