在整个字符串中插入一个字符

时间:2014-02-25 00:55:17

标签: java string

您好我正在尝试在字符串中的所有字符之间插入短划线。我已经做到了,但它不会工作:

public static String expand (String word)
{
    int stringLength = word.length();

    for (int x=0; x<stringLength; x++){
    word = new StringBuffer(word).insert(x, "-").toString();
    }
    return word;
}

它导致单词前面的破折号。我不明白为什么它不起作用。感谢。

4 个答案:

答案 0 :(得分:6)

这是正确的,所有破折号都插入到单词之前。以下是这种情况:当您插入第一个短划线时,过去在索引1处的内容会移动一个字符,因此当您在下一个位置插入短划线时,您将在前一个短划线后插入它:该字一直在移动离开,所以你的循环就像一条狗追逐自己的尾巴!

有几种方法可以解决此问题:

  • 在偶数位置插入破折号,即2*i
  • 以空StringBuffer开头,循环浏览原始字符,然后添加字符后跟短划线;当你在最后一个角色时,不要添加破折号。

请注意,第二种方法更有效,因为它在原始单词中的字符数是线性的。第一种方法(即基于插入的方法)效率较低,因为它是O(n 2 ),因为需要在每次插入时移动缓冲区的尾部。

答案 1 :(得分:3)

问题是你是在字符串中添加一个新字符,但是没有递增索引来解释它。

试试这个(注意,我没有测试过它,但是它应该可以正常工作。如果你在开始或结束时有一个额外的短划线,那么只需在之后移除它们):

public static String expand (String word)
{
    int stringLength = word.length();

    for (int x=1; x<(stringLength-1)*2; x+=2){
       word = new StringBuffer(word).insert(x, "-").toString();
    }
    return word;
}

答案 2 :(得分:0)

试试这个:

String word = "hello";
char[] wordChar = word.toCharArray(); //split String into char array

StringBuffer result = new StringBuffer("");
for (char c : wordChar) {
    result.append(c).append("-"); // iterate over the letters and append a dash
}
result.deleteCharAt(result.length() - 1); // remove last dash
System.out.println(result.toString());

输出:“h-e-l-l-o”

“分裂”&amp;征服;)

答案 3 :(得分:0)

使用此函数中的输入形成输出,并确保不要在最后一个字符后插入连字符:

    public static String expand(String word) {
    int stringLength = word.length();
    StringBuffer buffer = new StringBuffer();

    for (int i = 0; i < stringLength - 1; i++) {
        buffer.append(word.substring(i, i + 1));
        buffer.append("-");
    }
    buffer.append(word.substring(stringLength - 1, stringLength));

    return buffer.toString();
}