为了账号安全,请及时绑定邮箱和手机立即绑定

Java:如何获取字符串数组中单词的第n个字母

Java:如何获取字符串数组中单词的第n个字母

青春有我 2023-05-24 17:37:47
我需要编写一个名为 getSuccessiveLetters(words) 的静态方法,它接受一个字符串数组并返回一个字符串。如果字符串数组是 {"hello", "world"},那么程序应该返回“ho”。“h”来自第一个单词,“o”来自第二个单词的第二个字母,依此类推。我设法获得了 {"hello", "world"} 的正确返回值,但是如果字符串数组包含,例如,{"1st", "2nd", "3rd", "4th", "fifth"}它超出了挣扎的范围。public class Template01 {    public static void main(String[] args) {        System.out.println(getSuccessiveLetters(new String[]{"1st", "2nd", "3rd", "4th", "fifth"}));     }public static String getSuccessiveLetters(String[] words) {    char Str[] = new char[words.length];    String successive;    for(int i = 0; i < words.length; i++){        successive = words[i];        if (i < successive.length()){              Str[i] = successive.charAt(i);        }        else        {            break;        }    }    successive = new String(Str);    return successive;}我期望返回值是 1nd,但实际输出是 1nd\x00\x00。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

发生这种情况是因为当您初始化一个 char 数组时,它会用默认的 char 值填充该数组。
您可以在每次添加时使用StringBuilderList<Character>增加您的“阵列”。

改变

char[] str = new char[words.length];

StringBuilder str = new StringBuilder();

str[i] = successive.charAt(i);

str.append(successive.charAt(i));

然后在最后successive = str.toString();


查看完整回答
反对 回复 2023-05-24
?
HUWWW

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;

}


查看完整回答
反对 回复 2023-05-24
?
ibeautiful

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 - 但这取决于你给定的任务


查看完整回答
反对 回复 2023-05-24
  • 3 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信