反转字符串输入的第n个字

时间:2018-03-20 14:35:52

标签: java string user-input reverse

这是我在堆栈溢出中的第一个问题,请原谅我,如果我违反规则。

我想将用户输入作为字符串并反转字符串的每个第n个单词。 n值也由用户输入。如果用户输入无效值,程序应相应地响应用户。到现在为止,我能够接受一个字符串输入并反转整个字符串。我需要帮助将第n个值作为输入并使用n值反转字符串。程序应该在不使用“String.reverse”或任何其他字符串函数的情况下运行。希望我详细阐述了问题的各个方面。谢谢:))

示例I / O应如下所示:

用户输入=“Hello World!编程很有趣”
用户输入n值=“2”
预期输出=“你好!dlroW Programming si fun”
用户输入n值“2”,表示每个第二个字应该反转。

以下是我直到现在写的程序:

 import java.util.*;

    public class StringReverse {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in = new Scanner(System.in);

            String original, reverse="";

            System.out.print("Please enter a sentence to reverse: ");

            original= in.nextLine();

            for (int i=original.length()-1; i>=0; i--) {
                reverse += original.charAt(i);
            }
            System.out.println(reverse);    
        }
    }

3 个答案:

答案 0 :(得分:1)

迭代您的String并在分隔的+中追加(String)每个字符,直到您到达空格(' ')。如果出现空白,则有一个可以存储和计数的单词。

通过从后面迭代单词(i--,就像在实际代码中一样)来反转第n个单词,并将每个字符添加到String,这样您只需添加字符就可以反转单词。

我不知道您的情况是否允许联接+ String

听起来像家庭作业所以我只是给你一些灵感。

快乐的编码! :)

答案 1 :(得分:1)

您可以尝试使用以下代码。

import java.util.Scanner;

public class March21th {

    private static Scanner sc;

    public static void main(String[] args) {

        sc = new Scanner(System.in);
        System.out.print("Please enter a sentence to reverse: ");
        String str = sc.nextLine();
        System.out.print("Please enter nth value: ");
        int n = sc.nextInt();

        String[] strArr = str.split(" ");
        int len = strArr.length;

        String str2 = strArr[n-1];
        //System.out.println("str2: "+str2);
        String strrev2 = strArr[len-n];
        //System.out.println("strrev2: "+strrev2);

        char temp;
        char[] str2CharArr = str2.toCharArray();
        char[] strrev2CharArr = strrev2.toCharArray();
        int str2CharArrLen = str2CharArr.length;
        int strrev2CharArrLen = strrev2CharArr.length;
        //System.out.println("str2CharArrLen: "+str2CharArrLen);
        //System.out.println("strrev2CharArrLen: "+strrev2CharArrLen);

        for(int i=0,j=str2CharArrLen-1;i<str2CharArrLen/2;i++,j--) {
            temp = str2CharArr[i];
            str2CharArr[i] = str2CharArr[j];
            str2CharArr[j] =  temp;
        }
        String str2CharArrRev = String.valueOf(str2CharArr);
        //System.out.println("str2CharArr after reverse: "+str2CharArrRev);

        for(int i=0,j=strrev2CharArrLen-1;i<strrev2CharArrLen/2;i++,j--) {
            temp = strrev2CharArr[i];
            strrev2CharArr[i] = strrev2CharArr[j];
            strrev2CharArr[j] =  temp;
        }
        String strrev2CharArrRev = String.valueOf(strrev2CharArr);
        //System.out.println("strrev2CharArr after reverse: "+strrev2CharArrRev);

        strArr[n-1] = str2CharArrRev;
        strArr[len-n] = strrev2CharArrRev;
        //System.out.println("strArr[n-1]: "+strArr[n-1]);
        //System.out.println("strArr[len-n]: "+strArr[len-n]);

        String revStr = "";
        for(int i=0; i<len;i++) {
            revStr += strArr[i]+" ";
        }
        System.out.println(revStr);
    }
 }

输入:

String str = "Hello World! Programming is fun";

输出:

Hello !dlroW Programming si fun 

如果您不想使用split()函数,请选择帮助形式this page

答案 2 :(得分:0)

我只是花了一些时间来实现另一个版本来反转第n个值的句子。这是一个很好的做法。 ;)

public static void main(String[] args) {

    sc = new Scanner(System.in);
    System.out.print("Please enter a sentence to reverse: ");
    String sentence = sc.nextLine();

    System.out.print("Please enter nth value: ");
    int nthValue = sc.nextInt();

    System.out.println(reverseSentence(sentence, nthValue));
}

private static String reverseSentence(String sentence, int nthValue) {

    String reversedSentence = "";
    String word = "";
    int wordCount = 1;

    char[] sentenceChar = sentence.toCharArray();

    for (int i=0; i < sentenceChar.length; i++) {
        char letter = sentenceChar[i];
        // letter is whitespace or end of sentence?
        if ((letter == ' ') || i == sentenceChar.length - 1) {
            // match n-th value?
            if (wordCount % nthValue == 0) {
                reversedSentence += reverseWord(word) + ' ';
            } else {
                reversedSentence += word + ' ';
            }
            wordCount++;
            word = "";
        } else {
            word += letter;
        }
    }

    return reversedSentence;
}

private static String reverseWord(String word) {
    String reversedWord = "";
    char[] wordChar = word.toCharArray();
    for (int i=wordChar.length - 1; i >= 0; i--) {
        reversedWord += wordChar[i];
    }
    return reversedWord;
}