0

以下のプログラムはこれを行う必要があります :

ユーザー入力時: The quick brown fox. Jumps over. The lazy dog.
出力する必要があります:God yzal eth. Revo spmuj. Xof nworb kciuq eht.

しかし、代わりにユーザー入力:The quick brown fox. Jumps over. The lazy dog.
出力する場合xof nworb kciuq ehT. revo spmuJ . god yzal ehT .

import java.util.*;
public class Reverse {
public static void main( String args[] ) {
    String paragraph;
    Scanner input = new Scanner (System.in);

    System.out.print("Enter a paragraph: ");
    paragraph = input.nextLine();
    paragraph = paragraph.trim();
    StringTokenizer tokens = new StringTokenizer(paragraph, ".");
    while (tokens.hasMoreTokens()){
        String ss = tokens.nextToken();
        for (int i = ss.length() - 1; i>=0; i--) {
            System.out.print(ss.charAt(i));
        }
        System.out.print(". ");
    }
    System.out.println();
}
}

私もこれを考えました:

import java.util.*;

public class Reverse{

    public static void main(String[] args) {
    String paragraph;
    Scanner input = new Scanner (System.in);

    System.out.print("Enter a paragraph: ");
    paragraph = input.nextLine();
    paragraph = paragraph.trim();

    StringTokenizer parWordTokenizer = null;
    StringTokenizer parDotTokenizer = null;
    int numParDotTokens = 0;
    int numParWordTokens = 0;

    parDotTokenizer = new StringTokenizer (paragraph, ".");
    parWordTokenizer = new StringTokenizer (paragraph);
    numParDotTokens = parDotTokenizer.countTokens();
    numParWordTokens = parWordTokenizer.countTokens();

    String[] sentences = new String[numParDotTokens];
    String[] words = new String[numParWordTokens];
    String[] characters = new String[5];

    for (int i=0; i<numParDotTokens; i++) {
        sentences[i] = parDotTokenizer.nextToken();
        System.out.print("S: "+sentences[i]+"\n");
        parWordTokenizer = new StringTokenizer (sentences[i]);
        numParWordTokens = parWordTokenizer.countTokens();
        while (parDotTokenizer.hasMoreTokens()){
            String ss = parDotTokenizer.nextToken();
            for (int k = ss.length() - 1; k>=0; k--) {
                System.out.print(ss.charAt(k));
            }
            System.out.print(". ");
        }
        for (int j=0; j<numParWordTokens; j++) {
            words[j] = parWordTokenizer.nextToken();
            System.out.print("W: "+words[j]+"\n");
            while (parWordTokenizer.hasMoreTokens()){
                String ss = parWordTokenizer.nextToken();
                for (int k = ss.length() - 1; k>=0; k--) {
                    System.out.print(ss.charAt(k));
                }
                System.out.print(". ");
            }
        }
        }
    } } 

しかし、私が revo spmuJ . god yzal ehT . kciuq. nworb. xof. Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(Unknown Source) at ScrambleParagraph.main(Reverse.java:40) それを修正するのを手伝ってください。私は数日間正しい実装を考えていましたが、私は Java が初めてなので、少なくとも今のところはあまりできません。どうもありがとうございました!

4

3 に答える 3

1

これは大まかに私がそれを行う方法です:

public static void main(String[] args) {

    String paragraph;
    Scanner input = new Scanner(System.in);

    System.out.print("Enter a paragraph: ");
    paragraph = input.nextLine();
    paragraph = paragraph.trim();

    String reversedParagraph = new StringBuilder(paragraph)
            .reverse().toString().toLowerCase();

    StringBuilder out = new StringBuilder();
    for (String sentence : reversedParagraph.split(" *\\.")) {
        if (!sentence.equals("")) {
            sentence += ". ";
            out.append(Character.toUpperCase(sentence.charAt(0))
                    + sentence.substring(1));
        }
    }
    System.out.println(out.toString().trim());

}

入力が与えられた場合:"The quick brown fox. Jumps over. The lazy dog."

これにより、次が生成されます。"God yzal eht. Revo spmuj. Xof nworb kciuq eht."

頼んだものだそうです。

特別な構成要素は次のとおりです。StringBuilder.reverse()文字列を反転 String.split(regex)し、正規表現に基づいて文字列を断片に分割します。これを使用して、段落を反転した後、段落内の各文をループします。

于 2012-07-22T08:45:41.103 に答える
1

これは、この方法ではるかに簡単になります。

public String inverse(String str) {
    StringBuffer strBuf= new StringBuffer(str.trim());
    return strBuf.reverse().toString();         
}
于 2014-02-06T18:35:27.777 に答える
-2

入力を「。」で分割するのはどうですか。最初に各要素を反転しますか?

public class Reverse {

    public static void main(String[] args) {
        String input = "The quick brown fox. Jumps over. The lazy dog.";
        String[] sentences = input.split("\\.");
        StringBuilder result = new StringBuilder();
        for (int i = sentences.length - 1; i >= 0; i--) {
            String sentence = sentences[i];
            result.append(".").append(
                    new StringBuilder(sentence).reverse().toString());
        }
        System.out.println(result);
    }
}

出力:

.god yzal ehT .revo spmuJ .xof nworb kciuq ehT
于 2012-07-22T08:17:34.070 に答える