【问题标题】:How to print space in between words after reversing a sentence of words反转一个单词后如何在单词之间打印空格
【发布时间】:2017-10-12 08:47:51
【问题描述】:
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "Let's take LeetCode contest";
        reverseWords(str);
    }

    private static void reverseWords(String str) {
        // TODO Auto-generated method stub
        String[] words = str.split("\\s");
        String reverse = "";
        String word="";
        ArrayList<String> al = new ArrayList<String>();
        for(int i=0 ; i < words.length;i++){
            al.add(words[i]);
            for(int j=al.get(i).length()-1;j>=0;j--){
                reverse=reverse+al.get(i).charAt(j);
                word= reverse.replaceAll("..", "$0 ");
            }
        }
        System.out.println(str);
        System.out.println(word);
    }

这段代码给出的是:"s'teLekatedoCteeLtsetnoc"

但是应该输出预期的输出:"s'teL ekat edoCteeL tsetnoc"

【问题讨论】:

  • 您的代码确实输出您声称的内容。它输出"s' te Le ka te do Ct ee Lt se tn oc"

标签: java string algorithm data-structures string-matching


【解决方案1】:

实际上,发布的代码不会产生您声称的输出;它输出"s' te Le ka te do Ct ee Lt se tn oc"。您(出于某种原因)一次反转成对的字母。

有时,最好的方法是尽可能简单、可读地编写代码。以下是如何在一行(恕我直言)中做到这一点:

private static void reverseWords(String str) {
    System.out.println(
        Arrays.stream(str.split(" "))       // split into words
        .map(StringBuilder::new)            // use a StringBuilder for each word
        .map(StringBuilder::reverse)        // reverse each word
        .collect(Collectors.joining(" "))); // join em back up with spaces
}

【讨论】:

  • 我喜欢 cmets 中的逐行显示。我也在一些答案中使用它:)
【解决方案2】:
private static void reverseWords(String str) {
    // TODO Auto-generated method stub
    String[] words = str.split("\\s");
    String reverse = "";
    int len = words.length;

    for(int i=0;i<len;i++){
        reverse = reverse+new StringBuilder(words[i]).reverse().toString();
        if(i<len-1){
            reverse = reverse+" ";
        }
    }

    System.out.println(str);
    System.out.println(reverse);
}

试试这个作为你的 reverseWords() 方法。

【讨论】:

    【解决方案3】:
    public class Reverse {
    
        public static void main(String[] args) {
            String str = "Let's take LeetCode contest";
            reverseWords(str);
        }
    
        private static void reverseWords(String str) {
            char[] charArray = str.toCharArray();
            boolean flag = false;
            int start = 0;
            int end = 0;
            for (int i = 0; i < str.length(); i++) {
                if (charArray[i] == ' ' && !flag) {
                    flag = true;
                    end = i - 1;
                    reverseWord(charArray, start, end);
                }
                if (charArray[i] != ' ' && flag) {
                    start = i;
                    flag = false;
                }
            }
            reverseWord(charArray, start, charArray.length - 1);
            System.out.println(str);
            System.out.println(String.valueOf(charArray));
        }
    
        private static void reverseWord(char[] ch, int i, int j) {
            while (i < j) {
                char temp = ch[i];
                ch[i] = ch[j];
                ch[j] = temp;
                i++;
                j--;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      相关资源
      最近更新 更多