题目
编写一个方法smash,它接受一个单词数组并将它们拼成一个句子并返回句子。您可以忽略清理单词或添加标点符号的任何需要,但您应该在每个单词之间添加空格。小心,句子的开头或结尾不应该有空格!
例
var words = ['hello', 'world', 'this', 'is', 'great'];
smash(words); // returns "hello world this is great"
假设
你可以假设你只有单词。
你不能假设数组的大小。
您可以假设您将始终获得一个数组。
我们正在测试什么
我们正在测试基本循环和字符串操作。这适用于刚学习循环和字符串操作的初学者。
放弃
这适合初学者,所以我们想测试基本循环和字符串操作。高级用户应该能够轻松地在一行中完成此操作。
测试用例:
import static org.junit.Assert.*;
import org.junit.Test;
public class SmashWordsTest {
@Test
public void validate() {
assertEquals("Bilal Djaghout", SmashWords.smash(new String[] { "Bilal", "Djaghout" }));
assertEquals("hello world", SmashWords.smash(new String[] {"hello", "world"}));
assertEquals("hello amazing world", SmashWords.smash(new String[] {"hello", "amazing", "world"}));
}
@Test
public void validateEmpty() {
assertEquals("", SmashWords.smash(new String[] {}));
}
@Test
public void validateOneWord() {
assertEquals("Bilal", SmashWords.smash(new String[] {"Bilal"}));
assertEquals("Test", SmashWords.smash(new String[] {"Test"}));
}
}
解题
My
不好意思,我是高手啦。
public class SmashWords {
public static String smash(String... words) {
return String.join(" ",words);
}
}
Other
import java.util.Arrays;
import java.lang.StringBuilder;
public class SmashWords {
public static String smash(String... words) {
StringBuilder sb = new StringBuilder();
for (String word : words)
{
sb.append(word + " ");
}
return sb.toString().trim();
}
}
最好null检查一下
import java.util.Arrays;
public class SmashWords {
public static String smash(String... words) {
return words != null ? String.join(" ", words) : null;
}
}
后记
为了证明我的愚钝,特地去搜索了(String…),结果如下:
类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟…,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。 例如我们有一个方法叫做test(String…strings),那么你还可以写方法test(),但你不能写test(String[] strings),这样会出编译错误,系统提示出现重复的方法。
在使用的时候,对于test(String…strings),你可以直接用test()去调用,标示没有参数,也可以用去test(“aaa”),也可以用test(new String[]{“aaa”,”bbb”})。
另外如果既有test(String…strings)函数,又有test()函数,我们在调用test()时,会优先使用test()函数。只有当没有test()函数式,我们调用test(),程序才会走test(String…strings)。
网友评论