简体   繁体   English

Java程序反转句子中的单个单词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM