从用户输入中反转字符串
Reversing a String from user's input
我写了代码来提示用户输入一个句子,系统会反转显示。我在一些帮助下完成了它,但我现在很难评论我的代码来解释它的每一部分。自己做的有点明白了,但是感觉自己没有掌握每一行的"whys"
有人可以帮助我发表评论吗?
public static void main(String[] args) {
// TODO Auto-generated method stub
String original = "", reverse = ""; // Setting the strings values
Scanner in = new Scanner(System.in); // Scanner is equal to input from user
while(!original.contains("exit"))
// As long as user does not input "exit", user will be prompt to enter a sentence
{
original = "";
reverse = "";
System.out.println("Enter a sentence to be reversed: ");
original = in.nextLine(); // Setting "original" to be equal to user's input
int length = original.length(); // Getting user's input character length (original)
for (int i = length - 1; i >= 0; i--) // Getting input from the last character to be reversed
reverse = reverse + original.charAt(i); //Setting "reverse" to the input "original" characters
System.out.println(reverse); // Printing the input reversely
}
}
最模糊的部分是:
for (int i = length - 1; i >= 0; i--)
和:
reverse = reverse + original.charAt(i);
好吧,让我们用'HELLO'这个词作为输入来看一下。你可以看出,字符串的长度为 5,第一个字母 (H) 的索引为 0,第二个字母为 1,...最后一个字母的索引为 4,顺便说一句。是 length -i
。
循环 for (int i = length - 1; i >= 0; i--)
从最后一个字母开始,然后取倒数第二个,依此类推,并以相反的顺序将每个字母附加到反向字符串。通常在循环中您将执行以下操作:
reverse = reverse + original.CharAt(4)
=> 反转='O'
reverse = reverse + original.CharAt(3)
=> 反转='OL'
reverse = reverse + original.CharAt(2)
=> 反转='OLL'
reverse = reverse + original.CharAt(1)
=> 反转='OLLE'
reverse = reverse + original.CharAt(0)
=> 反转='OLLEH'
了解
for (int i = length - 1; i >= 0; i--)
reverse = reverse + original.charAt(i);
您应该将其重新格式化为
for (int i = length - 1; i >= 0; i--)
reverse = reverse + original.charAt(i);
或
for (int i = length - 1; i >= 0; i--) {
reverse = reverse + original.charAt(i);
}
表示取reverse
变量中当前存储的内容,并在末尾添加一个新字符+ original.charAt(i)
。这会产生一个新的 String
,它被分配回 reverse
变量,覆盖之前的内容,就像@agim 在他的回答中提到的那样。
这里有一些您可以考虑的其他选择。特别是使用 StringBuilder
因为它内置了 reverse()
函数,如果你想按字符反转句子。
import java.util.*;
public class JavaFiddle
{
public static void main(String[] args)
{
String sentence = "The quick brown fox jumps over the lazy dog";
// Print sentence forward
System.out.println(sentence);
// Print sentence backwards by words
String[] words = sentence.split(" ");
for (int i = words.length - 1; i >= 0; i--) {
System.out.print(words[i] + " ");
}
System.out.println();
// Print sentence backwards by character
for (int i = sentence.length() - 1; i >= 0; i--) {
System.out.print(sentence.charAt(i));
}
System.out.println();
// Print sentence backwards by character using StringBuilder;
StringBuilder reverseSentence = new StringBuilder(sentence);
System.out.println(reverseSentence.reverse());
}
}
结果
The quick brown fox jumps over the lazy dog
dog lazy the over jumps fox brown quick The
god yzal eht revo spmuj xof nworb kciuq ehT
god yzal eht revo spmuj xof nworb kciuq ehT
这是对正在发生的事情的解释。
public static void main(String[] args) {
String original = "", reverse = ""; // Create empty variables to hold the input and output
Scanner in = new Scanner(System.in); // Create an object to read from StdIn
while(!original.contains("exit"))
// Read from StdIn as long as user does not input "exit"
{
original = "";
reverse = "";
System.out.println("Enter a sentence to be reversed: ");
original = in.nextLine(); // Save the user's input as "original"
int length = original.length(); // Get the length of the input
for (int i = length - 1; i >= 0; i--) // Iterate over each character of the input, starting from the end until you reach the beginning and add the character to the "reverse" string
reverse = reverse + original.charAt(i);
System.out.println(reverse); // Output the result
}
}
用两个单独的注释来解释 for 循环没有多大意义,因为这两行中的每一行如果没有另一行就毫无意义。
我写了代码来提示用户输入一个句子,系统会反转显示。我在一些帮助下完成了它,但我现在很难评论我的代码来解释它的每一部分。自己做的有点明白了,但是感觉自己没有掌握每一行的"whys"
有人可以帮助我发表评论吗?
public static void main(String[] args) {
// TODO Auto-generated method stub
String original = "", reverse = ""; // Setting the strings values
Scanner in = new Scanner(System.in); // Scanner is equal to input from user
while(!original.contains("exit"))
// As long as user does not input "exit", user will be prompt to enter a sentence
{
original = "";
reverse = "";
System.out.println("Enter a sentence to be reversed: ");
original = in.nextLine(); // Setting "original" to be equal to user's input
int length = original.length(); // Getting user's input character length (original)
for (int i = length - 1; i >= 0; i--) // Getting input from the last character to be reversed
reverse = reverse + original.charAt(i); //Setting "reverse" to the input "original" characters
System.out.println(reverse); // Printing the input reversely
}
}
最模糊的部分是:
for (int i = length - 1; i >= 0; i--)
和:
reverse = reverse + original.charAt(i);
好吧,让我们用'HELLO'这个词作为输入来看一下。你可以看出,字符串的长度为 5,第一个字母 (H) 的索引为 0,第二个字母为 1,...最后一个字母的索引为 4,顺便说一句。是 length -i
。
循环 for (int i = length - 1; i >= 0; i--)
从最后一个字母开始,然后取倒数第二个,依此类推,并以相反的顺序将每个字母附加到反向字符串。通常在循环中您将执行以下操作:
reverse = reverse + original.CharAt(4)
=> 反转='O'reverse = reverse + original.CharAt(3)
=> 反转='OL'reverse = reverse + original.CharAt(2)
=> 反转='OLL'reverse = reverse + original.CharAt(1)
=> 反转='OLLE'reverse = reverse + original.CharAt(0)
=> 反转='OLLEH'
了解
for (int i = length - 1; i >= 0; i--)
reverse = reverse + original.charAt(i);
您应该将其重新格式化为
for (int i = length - 1; i >= 0; i--)
reverse = reverse + original.charAt(i);
或
for (int i = length - 1; i >= 0; i--) {
reverse = reverse + original.charAt(i);
}
表示取reverse
变量中当前存储的内容,并在末尾添加一个新字符+ original.charAt(i)
。这会产生一个新的 String
,它被分配回 reverse
变量,覆盖之前的内容,就像@agim 在他的回答中提到的那样。
这里有一些您可以考虑的其他选择。特别是使用 StringBuilder
因为它内置了 reverse()
函数,如果你想按字符反转句子。
import java.util.*;
public class JavaFiddle
{
public static void main(String[] args)
{
String sentence = "The quick brown fox jumps over the lazy dog";
// Print sentence forward
System.out.println(sentence);
// Print sentence backwards by words
String[] words = sentence.split(" ");
for (int i = words.length - 1; i >= 0; i--) {
System.out.print(words[i] + " ");
}
System.out.println();
// Print sentence backwards by character
for (int i = sentence.length() - 1; i >= 0; i--) {
System.out.print(sentence.charAt(i));
}
System.out.println();
// Print sentence backwards by character using StringBuilder;
StringBuilder reverseSentence = new StringBuilder(sentence);
System.out.println(reverseSentence.reverse());
}
}
结果
The quick brown fox jumps over the lazy dog
dog lazy the over jumps fox brown quick The
god yzal eht revo spmuj xof nworb kciuq ehT
god yzal eht revo spmuj xof nworb kciuq ehT
这是对正在发生的事情的解释。
public static void main(String[] args) {
String original = "", reverse = ""; // Create empty variables to hold the input and output
Scanner in = new Scanner(System.in); // Create an object to read from StdIn
while(!original.contains("exit"))
// Read from StdIn as long as user does not input "exit"
{
original = "";
reverse = "";
System.out.println("Enter a sentence to be reversed: ");
original = in.nextLine(); // Save the user's input as "original"
int length = original.length(); // Get the length of the input
for (int i = length - 1; i >= 0; i--) // Iterate over each character of the input, starting from the end until you reach the beginning and add the character to the "reverse" string
reverse = reverse + original.charAt(i);
System.out.println(reverse); // Output the result
}
}
用两个单独的注释来解释 for 循环没有多大意义,因为这两行中的每一行如果没有另一行就毫无意义。