【发布时间】:2019-07-10 02:14:42
【问题描述】:
为什么它不创建空列表?
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;
}
}
【问题讨论】:
-
'String fileContent = "";' -> 这不能被拆分,但仍然是一个字符串,所以你得到一个数组,其中元素是那个空字符串。
-
空的
String仍然是Object,split不会改变这一点。 -
那么,我可以使用这个构造函数以某种方式为我的测试创建空列表吗?
-
甚至陌生人:
" ".split("[\\s]+")给出一个空数组。请不要问我这与文档告诉我们的内容如何兼容:) -
我猜它是空的原因是“尾随空字符串将被丢弃”。
标签: java list unit-testing testing iterator