4

分割関数を使用せずに文の文字を逆にしようとしています。私は本当に近いですが、私は最後の手紙がありません。誰かが私を正しい方向に向けてくれませんか?現在、「これは新しい文です」を「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();
}
4

6 に答える 6

4
  • startを意味しwordStartます。iがスペースを指すと、次のwordStartはiの後に指す必要があります。
  • したがって、最後iは最後の単語charの後にある必要があり、length()
  • if-then-elseが広すぎます。ある場合にはスペースを追加する必要があります:私はスペースを指しています。

無条件にループする可能性があり、i == length()でループコードの途中で中断します。

于 2013-02-13T20:11:14.667 に答える
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();
}
于 2013-02-13T20:07:44.313 に答える
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)場合、最後のエラーはi、文.長さ-1ではなく文.長である必要があるため、これで解決します。

部分文字列は最後のインデックスで開いているため、配置substring(1, 10)すると 1 から 9 までの部分文字列になります。それは最後の単語の問題である可能性があります。

最初のスペースの問題は、部分文字列の問題でもあります。たとえば、「これは...」を読んでいて、初めて部分文字列を実行するため、「これ」を期待start=0i = 4ますが、実際には「これ」です。次の読み方は、「は」となりますstart=4i=7

したがって、インデックスを変更すると、if/else も削除できるはずですstart==0

于 2013-02-13T20:24:33.733 に答える
3
String reverseString = "This is a new sentence";
System.out.println(new StringBuffer(reverseString).reverse().toString());

Syso prints : ecnetnes wen a si sihT
于 2013-02-13T20:25:56.573 に答える
1

置く

i <= sentence.length()

forループで、ifを次のように変更します。

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

なので

substring(start,i)

含まれていないiまでの文字列を返します。

于 2013-02-13T20:14:27.773 に答える
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());
    }
}

見られる分割ではありません。

于 2013-02-13T20:37:45.840 に答える