反转字符串。每一个字都在逆转

时间:2014-09-29 19:15:43

标签: java string

所以我有一个for循环可以反转字符串中的每个其他单词。我无法确定导致这种情况的原因。

for (int i = 0; i < words.length; i++) 
{
    stringBuilder.append(words[(words.length-1)-i]);
    stringBuilder.reverse()
}
newMessage = stringBuilder.toString();
return Message

4 个答案:

答案 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"