美文网首页
每日一练85——Java单词合并句子(8kyu)

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

作者: 砾桫_Yvan | 来源:发表于2018-08-29 09:34 被阅读0次

    题目

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

    相关文章

      网友评论

          本文标题:每日一练85——Java单词合并句子(8kyu)

          本文链接:https://www.haomeiwen.com/subject/ajqhwftx.html