猿问

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

我需要编写一个名为 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。


青春有我
浏览 215回答 3
3回答

翻阅古今

发生这种情况是因为当您初始化一个 char 数组时,它会用默认的 char 值填充该数组。您可以在每次添加时使用StringBuilder或List<Character>增加您的“阵列”。改变char[]&nbsp;str&nbsp;=&nbsp;new&nbsp;char[words.length];到StringBuilder&nbsp;str&nbsp;=&nbsp;new&nbsp;StringBuilder();和str[i]&nbsp;=&nbsp;successive.charAt(i);到str.append(successive.charAt(i));然后在最后successive = str.toString();。

HUWWW

这是因为当您忽略原始数组中不够长的字符串时,您并没有因此设置一些 char 数组元素。这意味着某些元素char的值为\0(默认值为char)。因此,生成的字符串\0也有这些额外的字符。我认为在这里使用 aStringBuilder而不是 a更合适char[]:public static String getSuccessiveLetters(String[] words) {&nbsp; &nbsp; StringBuilder builder = new StringBuilder();&nbsp; &nbsp; String successive;&nbsp; &nbsp; for(int i = 0; i < words.length; i++){&nbsp; &nbsp; &nbsp; &nbsp; successive = words[i];&nbsp; &nbsp; &nbsp; &nbsp; if (i < successive.length()){&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; builder.append(successive.charAt(i));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; // you should not break here, because there might be a longer string in the array later on.&nbsp; &nbsp; &nbsp; &nbsp; // but apparently you don't want the "h" in "fifth"? Then I guess you should break here.&nbsp; &nbsp; }&nbsp; &nbsp; successive = builder.toString();&nbsp; &nbsp; return successive;}

ibeautiful

我建议在这里使用单元测试。这可以帮助您改进。您正在此处创建一个 charArray:char&nbsp;Str[]&nbsp;=&nbsp;new&nbsp;char[words.length];这个数组有你的字符串数组的长度new&nbsp;String[]{"1st",&nbsp;"2nd",&nbsp;"3rd",&nbsp;"4th",&nbsp;"fifth"}这是 5你为你的新数组创建了 3 个条目(因为你在第一个单词处中断,太短了)因此你得到 3 个字母“1nd”,并且你的数组中的其他 2 个插槽在调用时填充了空白successive&nbsp;=&nbsp;new&nbsp;String(Str);第一个:考虑 break 语句第二个:考虑使用 StringBuilder / StringBuffer 而不是 char[] 进行匹配恕我直言,最正确的结果应该是1nd h&nbsp;- 但这取决于你给定的任务
随时随地看视频慕课网APP

相关分类

Java
我要回答