所以我有一个for循环可以反转字符串中的每个其他单词。我无法确定导致这种情况的原因。
for (int i = 0; i < words.length; i++)
{
stringBuilder.append(words[(words.length-1)-i]);
stringBuilder.reverse()
}
newMessage = stringBuilder.toString();
return Message
答案 0 :(得分:2)
stringBuilder.reverse()
反转您在每次迭代时正在构建的整个字符串。
尝试:
for (int i = 0 ; i < words.length ; i++) {
String word = words[(words.length-1)-i];
String reverse = new StringBuilder(word).reverse().toString();
stringBuilder.append(reverse).append(" ");
}
甚至更简单,最后反转:
for (int i = 0 ; i < words.length ; i++) {
stringBuilder.append(words[(words.length-1)-i]).append(" ");
}
newMessage = stringBuilder.reverse().toString();
for (String w : words) {
String reverse = new StringBuilder(w).reverse().toString();
stringBuilder.append(reverse).append(" ");
}
newMessage = stringBuilder.toString();
答案 1 :(得分:0)
stringBuilder.reverse();正在颠倒整个单词注释,该行和您的代码不会反转您的新消息
答案 2 :(得分:0)
首先,你的循环比它需要的更复杂。如果你想从最后开始反转单词,你应该只使用循环索引来做到这一点,你不需要(words.length-1)-i
计算。
另一件事是,当你在reverse()
上调用StringBuilder
时,你正在反转整个字符串而不仅仅是附加部分。您可以做的是使用临时StringBuilder
来执行反转,使用临时String
变量来将反转与附加分开。
这样的事情:
StringBuilder reversedBuilder = new StringBuilder();
for (int i = words.length - 1; i >= 0; i --)
{
String reversed = reversedBuilder.append(words[i]).reverse().toString(); // reverse the word
stringBuilder.append(reversed).append(" ");
reversedBuilder.setLength(0); // clear the reversed
}
如果您愿意,可以在一行代码中添加(添加注释以便澄清):
for (int i = words.length - 1; i >= 0; i --)
{
stringBuilder.append(new StringBuilder() // create a temp string builder
.append(words[i]) // add the current word to temp string builder
.reverse() // reverse the current word in the temp string builder
.toString()) // add the reversed word to stringBuilder
.append(" "); // add the space to stringBuilder
}
答案 3 :(得分:0)
var string = "hello world";
function reverseWords(string) {
var words = string.split(' '),
finals = [];
words.forEach(function(word) {
finals.push(word.split('').reverse().join(''););
});
return finals.join(' ');
}
reverseWords(string); // "olleh dlrow"