Java代码问题:尝试打印倒数第二个单词却仅输出"L",求排查修复
问题排查与修复
你的代码输出仅单个字符的核心问题是while循环内的索引k被重复初始化:每次进入while循环都把k设为0,导致每个字符都覆盖word[0],最终数组里只存了倒数第二个单词的第一个字符(也就是love的l)。另外打印时遍历整个25长度的数组,前面都是空字符,所以最终只看到那个有效字符。
修复后的代码(保留原思路)
把k的初始化移到while循环外面,确保每次循环k能递增存储字符;同时打印时只输出有效字符,避免空字符干扰:
public class secToLast{ public static void main(String args[]){ String gg = "I love India"; int len = gg.length(); char[] word = new char[25]; for(int i = len-1 ; i>=0; i--){ if(gg.charAt(i)==' '){ int j = i-1; int k = 0; // 将k的初始化移到while循环外 // 存储单词到数组 while(j>=0 && gg.charAt(j) != ' '){ word[k] = gg.charAt(j); j = j-1; k = k+1; } break; } } // 只打印数组中的有效字符 for(int p = word.length-1; p>=0; p--){ if(word[p] != '\u0000'){ // 判断是否为默认空字符 System.out.print(word[p]); } } } }
更简洁的实现方式(推荐)
利用Java字符串API可以更高效地实现需求,无需手动操作数组和索引:
public class secToLast{ public static void main(String args[]){ String gg = "I love India"; // 定位最后一个空格的位置 int lastSpace = gg.lastIndexOf(' '); // 从最后一个空格前的位置,定位倒数第二个空格 int secondLastSpace = gg.lastIndexOf(' ', lastSpace - 1); // 截取两个空格之间的子串,即倒数第二个单词 String secondLastWord = gg.substring(secondLastSpace + 1, lastSpace); System.out.println(secondLastWord); } }
如果要兼容多空格的情况,也可以用分割字符串的方式:
public class secToLast{ public static void main(String args[]){ String gg = "I love India"; // 按一个或多个空格分割字符串 String[] words = gg.split("\\s+"); if(words.length >= 2){ System.out.println(words[words.length - 2]); } } }
内容的提问来源于stack exchange,提问作者Aditya Sahu
相关产品推荐
相关产品推荐

