反转字符串输入的第n个字
Reverse the nth word of string input
这是我在堆栈溢出中的第一个问题,如果我违反了规则,请原谅我。
我想将用户输入作为字符串并反转字符串的每个第 n 个单词。 n 值也由用户输入。如果用户输入无效值,程序应相应地响应用户。到目前为止,我能够接受一个字符串输入并反转整个字符串。我需要帮助将第 n 个值作为输入并使用 n 值反转字符串。并且程序应该 运行 而不使用 "String.reverse" 或任何其他字符串函数。希望我详细说明了问题的各个方面。谢谢:)
示例 I/O 应如下所示:
用户输入="Hello World! Programming is fun"
用户输入 n 值 =“2”
预期输出 = "Hello !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);
}
}
迭代您的 String
并附加 (+
) 分隔的 String
中的每个字符,直到遇到空白 (' '
)。如果出现空格,您就有了一个可以存储和计数的单词。
通过从后面迭代单词来反转 n-th 单词(i--
就像在您的实际代码中一样)并将每个字符添加到 String
这样您就可以通过简单地反转单词添加字符。
我不知道在你的情况下是否允许 String
的连接 (+
)?
听起来像是作业,所以我只是给你一些灵感。
编码愉快! :)
您可以尝试使用以下代码。
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
我刚刚有一些时间来实现另一个版本的反转带有 n-th 值的句子。只是一个很好的练习。 ;)
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;
}
这是我在堆栈溢出中的第一个问题,如果我违反了规则,请原谅我。
我想将用户输入作为字符串并反转字符串的每个第 n 个单词。 n 值也由用户输入。如果用户输入无效值,程序应相应地响应用户。到目前为止,我能够接受一个字符串输入并反转整个字符串。我需要帮助将第 n 个值作为输入并使用 n 值反转字符串。并且程序应该 运行 而不使用 "String.reverse" 或任何其他字符串函数。希望我详细说明了问题的各个方面。谢谢:)
示例 I/O 应如下所示:
用户输入="Hello World! Programming is fun"
用户输入 n 值 =“2”
预期输出 = "Hello !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);
}
}
迭代您的 String
并附加 (+
) 分隔的 String
中的每个字符,直到遇到空白 (' '
)。如果出现空格,您就有了一个可以存储和计数的单词。
通过从后面迭代单词来反转 n-th 单词(i--
就像在您的实际代码中一样)并将每个字符添加到 String
这样您就可以通过简单地反转单词添加字符。
我不知道在你的情况下是否允许 String
的连接 (+
)?
听起来像是作业,所以我只是给你一些灵感。
编码愉快! :)
您可以尝试使用以下代码。
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
我刚刚有一些时间来实现另一个版本的反转带有 n-th 值的句子。只是一个很好的练习。 ;)
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;
}