天天看点

Codewars-Java编程刷题学习5- Stop gninnipS My sdroW!

刚看了下,有半个月没刷题了,有点懈怠,还有就是最近在整其他的东西,忽略了,现在开始补上。

题目:

Codewars-Java编程刷题学习5- Stop gninnipS My sdroW!

[翻译]

编写一个函数,该函数接受一个或多个单词的字符串,并返回相同的字符串,但所有五个或更多字母的单词都颠倒过来(如这个kata的名称)。

传入的字符串将只包含字母和空格。

只有出现多个单词时,才会包含空格。

[例子]

spinWords("Hey fellow warriors") => "Hey wollef sroirraw" 

spinWords("This is a test") => "This is a test" 

spinWords("This is another test") => "This is rehtona test"

解: 根据题意可知,题目要求将字符串里包含五个及以上个字符的单词都颠倒过来。

颠倒字符串,一般能想到两种方式:一是使用StringBuffer的reverse()方法、二是拆成字符数组倒过来再合起来,我这里使用第一种。

public class SpinWords {

  public String spinWords(String sentence) {
      String rs = "";
      String[] strs=sentence.split(" ");
        for(String str : strs){
            if(str.length() >= 5){
                rs += new StringBuffer(str).reverse().toString() + " ";
            }else {
                rs += str + " ";
            }
        }
       return rs.trim();
  }
}
           

接下来,惯例阅读高赞的代码:

import java.util.Arrays;

public class SpinWords {

  public String spinWords(String sentence) {
    String[] words = sentence.split(" ");
    for (int i=0; i<words.length; i++) {
      if (words[i].length() >= 5) {
        words[i] = new StringBuilder(words[i]).reverse().toString();
      }
    }
    return String.join(" ",words);
  }
}
           

思路和我的是一样的,但是他这个更简洁明了,使用了String的join()方法,没有我的代码啰嗦。

import java.util.stream.*;
import java.util.Arrays;

public class SpinWords {

  public String spinWords(String sentence) {
    return Arrays.stream(sentence.split(" "))
                 .map(i -> i.length() > 4 ? new StringBuilder(i).reverse().toString() : i)
                 .collect(Collectors.joining(" "));
  }
}
           

高赞第二的代码,思路一致,就是循环和stream流的区别使用。

import java.util.Arrays;
import java.util.stream.Collectors;

public class SpinWords {
  public static final String WORD_DELIMITER = " ";
  
  public String spinWords(String sentence) {
    return Arrays.stream(sentence.split(WORD_DELIMITER, -1)).map(SpinWords::spinIfNecessary).collect(Collectors.joining(WORD_DELIMITER));
  }

  private static String spinIfNecessary(String word) {
    return spinnable(word) ? spin(word) : word;
  }

  private static boolean spinnable(String word) {
    return word.length() >= 5;
  }

  private static String spin(String word) {
    return new StringBuilder(word).reverse().toString();
  }
}
           

高赞第三的代码,没有那么一目了然需要耐心看了,其实就是将高赞二中的每一步都拆出来成一个方法,在大型项目中这样做可以做到低耦合高复用。

点此欢迎光临我的个人网站【一几文星球】

 微信公众号,欢迎关注,一起学习。

Codewars-Java编程刷题学习5- Stop gninnipS My sdroW!