一个句子中的反转字符

时间:2013-02-13 19:59:46

标签: java string char

我试图在不使用拆分功能的情况下反转句子中的字符。我真的很接近,但我错过了最后一封信。有人可以指出我正确的方向吗?现在它打印“这是一个新句子”作为“sihT si a wen cnetnes”我还包括 if(start == 0)因为程序会跳过初始空格字符,但我不知道明白为什么?

static String reverseLetters(String sentence)
    StringBuilder reversed = new StringBuilder("");
        int counter = 0;
        int start = 0;
        String word;

        for(int i = 0; i <= sentence.length()-1 ; i++ )
        {
            if(sentence.charAt(i)== ' '|| i == sentence.length()-1 )
            {
                StringBuilder sb = new StringBuilder("");
                sb.append(sentence.substring(start,i));
                if(start == 0)
                {
                start = i;
                word = sb.toString();
                reversed.append(reverseChar(word));
                reversed.append(' ');
                }
                else
                {
                    start = i;
                    word = sb.toString();
                    reversed.append(reverseChar(word));
                }
            }


  return reversed.toString();
        }

static String reverseChar (String word)
{
    StringBuilder b = new StringBuilder("");
    for(int idx = word.length()-1; idx >= 0; idx -- )
    {
        b.append(word.charAt(idx));
    }
    return b.toString();
}

6 个答案:

答案 0 :(得分:4)

  • start表示wordStart。当我指向空间时,下一个wordStart应该指向i。
  • 因此,最后一个i应该指向最后一个字词char,应该是length()
  • if-then-else太广泛了;在一个案例中必须添加一个空格:我指着空间。

可以无条件循环,并且在循环代码中间的i == length()中断。

答案 1 :(得分:3)

另一个选择

private String reverse (String originalString) {
    StringBuilder reverseString = new StringBuilder();
    for (int i = originalString.length() - 1; i >= 0; i--) {
        reverseString.append(originalString.charAt(i));
    }
    return reverseString.toString();
}

答案 2 :(得分:3)

我认为错误在于索引,for应该是

 for(int i = 0; i <= sentence.length() ; i++ )

然后if应为:

if (sentence.charAt(i==0?0:i-1)== ' '|| i == sentence.length() )

对我来说,错误将是最后一个substring(start,i)的{​​{1}}应该是sentence.length而不是sentence.length-1,所以这将解决它。

Substring在最后一个索引中打开,所以如果你把i放在从1到9的子串中。这可能是最后一个字的问题。

第一个空格的东西也是子字符串的问题,让我们说你正在阅读“这是......”它第一次用substring(1, 10)start=0做一个子字符串你期待“这个”,但它确实是“这个”。下一次阅读i = 4start=4将是“是”。

因此,通过更改索引,您应该能够使用i=7删除if / else。

答案 3 :(得分:3)

String reverseString = "This is a new sentence";
System.out.println(new StringBuffer(reverseString).reverse().toString());

Syso prints : ecnetnes wen a si sihT

答案 4 :(得分:1)

i <= sentence.length()

在for循环中,将if更改为:

if(i == sentence.length() || sentence.charAt(i)== ' ')

as

substring(start,i)

返回最多i的字符串,不包括在内。

答案 5 :(得分:1)

import java.util.Stack;

public class Class {
    public static void main(String[] args) {
        String input = "This is a sentence";
        char[] charinput = input.toCharArray();
        Stack<String> stack = new Stack<String>();
        for (int i = input.length() - 1; i >= 0; i--) {
            stack.push(String.valueOf(charinput[i]));
        }
        StringBuilder StackPush = new StringBuilder();
        for (int i = 0; i < stack.size(); i++) {
            StackPush.append(stack.get(i));
        }
        System.out.println(StackPush.toString());
    }
}

不要分裂。