3 回答
TA贡献1780条经验 获得超5个赞
发生这种情况是因为当您初始化一个 char 数组时,它会用默认的 char 值填充该数组。
您可以在每次添加时使用StringBuilder
或List<Character>
增加您的“阵列”。
改变
char[] str = new char[words.length];
到
StringBuilder str = new StringBuilder();
和
str[i] = successive.charAt(i);
到
str.append(successive.charAt(i));
然后在最后successive = str.toString();
。
TA贡献1874条经验 获得超12个赞
这是因为当您忽略原始数组中不够长的字符串时,您并没有因此设置一些 char 数组元素。这意味着某些元素char的值为\0(默认值为char)。因此,生成的字符串\0也有这些额外的字符。
我认为在这里使用 aStringBuilder而不是 a更合适char[]:
public static String getSuccessiveLetters(String[] words) {
StringBuilder builder = new StringBuilder();
String successive;
for(int i = 0; i < words.length; i++){
successive = words[i];
if (i < successive.length()){
builder.append(successive.charAt(i));
}
// you should not break here, because there might be a longer string in the array later on.
// but apparently you don't want the "h" in "fifth"? Then I guess you should break here.
}
successive = builder.toString();
return successive;
}
TA贡献1993条经验 获得超5个赞
我建议在这里使用单元测试。这可以帮助您改进。
您正在此处创建一个 charArray:
char Str[] = new char[words.length];
这个数组有你的字符串数组的长度
new String[]{"1st", "2nd", "3rd", "4th", "fifth"}
这是 5
你为你的新数组创建了 3 个条目(因为你在第一个单词处中断,太短了)因此你得到 3 个字母“1nd”,并且你的数组中的其他 2 个插槽在调用时填充了空白
successive = new String(Str);
第一个:考虑 break 语句第二个:考虑使用 StringBuilder / StringBuffer 而不是 char[] 进行匹配
恕我直言,最正确的结果应该是1nd h - 但这取决于你给定的任务
添加回答
举报