[英]Java Program to reverse individual words in the sentence
I am trying to write a java program that reverses every individual word in a sentence.我正在尝试编写一个 java 程序来反转句子中的每个单词。 For example, if the sentence is "Hello World. Hello Java."
例如,如果句子是“Hello World.Hello Java”。 , the output should be "olleH dlroW. olleH avaJ" .
,输出应该是"olleH dlroW. olleH avaJ" 。 I am able to do the reverse but the output I am getting is "olleH .dlroW olleH .avaJ" where even the dot is getting reversed which should not happen.
我能够做相反的事情,但我得到的输出是“olleH .dlroW olleH .avaJ” ,其中连点都被颠倒了,这不应该发生。 Can somebody help me fix it?
有人可以帮我解决吗?
Thank you!!谢谢!!
I tried something like this:我试过这样的事情:
import java.util.Scanner;
public class ReverseWords {
public static void main(String[] args) {
System.out.println("Enter a string to be reversed:");
Scanner input = new Scanner(System.in);
String reverse = "";
while(input.hasNextLine())
{
String str = input.next();
for(int i = str.length()-1; i >= 0; i--)
{
reverse = reverse + str.charAt(i);
}
reverse += " ";
System.out.println(reverse);
}
}
}
Expected output: olleH dlroW.预期输出: olleH dlroW。 olleH avaJ.
olleH avaJ.
Output I am getting:我得到的输出:
olleH奥列
olleH .dlroW olleH.dlroW
olleH .dlroW olleH olleH .dlroW olleH
olleH .dlroW olleH .avaJ olleH .dlroW olleH .avaJ
Here is the java 8 solution, you may need to modify replaceChar
method if you want to restrict other special characters.这是java 8的解决方案,如果你想限制其他特殊字符,你可能需要修改
replaceChar
方法。
public static void main(String[] args) {
String str = "Hello World. Hello Java.";
String collect = Arrays.stream(str.split("\\s+")) // split sentences into words
.map(s -> new StringBuffer(s)) // converting to StringBuffer
.map(s -> s.reverse()) // reversing the string
.map(s -> replaceChar(s)) // replace first char if it is dot
.collect(Collectors.joining(" ")); // join all the words
System.out.println(collect);
}
private static String replaceChar(StringBuffer stringBuffer) {
if(stringBuffer.charAt(0) == '.') {
stringBuffer.deleteCharAt(0);
return stringBuffer.toString() + ".";
}
return stringBuffer.toString();
}
If you want to do it in the imperative style you can modify your code as below:如果你想以命令式风格来做,你可以修改你的代码,如下所示:
String str = "Hello World. Hello Java.";
String[] tokens = str.split("\\s+");
String reverseString = "";
for (String token : tokens) {
String reverse = "";
for (int i = token.length() - 1; i >= 0; i--) {
reverse = reverse + token.charAt(i);
}
if(reverse.charAt(0) == '.') {
reverse = reverse.substring(1) + ".";
}
reverseString = reverseString + " " + reverse;
}
System.out.println(reverseString);
Changed a little in your code to handle .在您的代码中稍作更改以处理 . in words.
用言语。
import java.util.Scanner;
public class HelloWorld{
public static void main(String []args){
System.out.println("Enter a string to be reversed:");
Scanner input = new Scanner(System.in);
String reverse = "";
while(input.hasNextLine())
{
String str = input.next();
if(str.contains(".")){
str = str.replace(".","");
for(int i = str.length()-1; i >= 0; i--)
{
reverse = reverse + str.charAt(i);
}
reverse = reverse+".";
}
else{
for(int i = str.length()-1; i >= 0; i--)
{
reverse = reverse + str.charAt(i);
}
}
reverse += " ";
System.out.println(reverse);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.