为什么Array.asList不创建空列表?

时间:2019-02-15 22:11:56

标签: java list unit-testing testing iterator

为什么不创建空列表?

 String fileContent = "";
List<String> wordsList = Arrays.asList(fileContent.trim().split("[\\s]+"));

当我使用时:

System.out.print(wordsList.size());

它打印:

1

此列表中的第一位是什么? 我要测试迭代器时遇到这个问题。

我的测试:

@Test
    void checkIfWorksWhenNoWord() {
        String emptyString="";

        assertFalse(new WordIterator(emptyString).hasNext());
    }

我的课:

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class WordIterator implements Iterator {

    int index;
    List<String> wordsList;

    public WordIterator(String fileContent) {
        this.wordsList = Arrays.asList(fileContent.trim().split("[\\s]+"));
    }

    public List<String> getWordsList() {
        return wordsList;
    }

    @Override
    public boolean hasNext() {
        return index < wordsList.size();
    }
    @Override
    public String next() {
        if(hasNext()){

            return wordsList.get(index++);
        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:7)

来自Javadoc split

  

此方法返回的数组包含此字符串的每个子字符串,该子字符串由与给定表达式匹配的另一个子字符串终止或由字符串的结尾终止。

因此,"".split("[\\s]+")给出Array(""),即包含单个空字符串的数组,因为空字符串是输入字符串中唯一以输入结尾终止的子字符串串。奇怪,但事实如此。