每日一练85——Java单词合并句子(8kyu)

2018-08-29  本文已影响0人  砾桫_Yvan

题目

编写一个方法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)。

上一篇下一篇

猜你喜欢

热点阅读