您好我正在尝试在字符串中的所有字符之间插入短划线。我已经做到了,但它不会工作:
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;
}
它导致单词前面的破折号。我不明白为什么它不起作用。感谢。
答案 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();
}