刚看了下,有半个月没刷题了,有点懈怠,还有就是最近在整其他的东西,忽略了,现在开始补上。
题目:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90zdaVnRyQmb1cVWwh2MaVnRyQmb1cVWwh2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5MjN2QTOwUTM4AzNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
[翻译]
编写一个函数,该函数接受一个或多个单词的字符串,并返回相同的字符串,但所有五个或更多字母的单词都颠倒过来(如这个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();
}
}
高赞第三的代码,没有那么一目了然需要耐心看了,其实就是将高赞二中的每一步都拆出来成一个方法,在大型项目中这样做可以做到低耦合高复用。
点此欢迎光临我的个人网站【一几文星球】
微信公众号,欢迎关注,一起学习。