我的数组如下:
unitList = new ArrayList<String>( Arrays.
asList(result.getJSONObject( position ).
getString( "units" ).replace("[", "").
replace("]", "").
split(",")));
当我使用此函数时,我想知道该数组中是否至少有一个元素:
unitList.size()
它返回此:
06-30 02:04:51.453 18653-18653/search.bert.searchviewtest I/unitList.size: 1
06-30 02:04:51.453 18653-18653/search.bert.searchviewtest I/unitList: []
06-30 02:04:56.123 18653-18653/search.bert.searchviewtest I/unitList.size: 6
06-30 02:04:56.123 18653-18653/search.bert.searchviewtest I/unitList: ["1", "2", "3", "4", "5", "6"]
这很奇怪,因为[]没有任何元素,但是返回1。如果列表为[“ 1”],它还会返回1吗?我怎么知道列表是否为空?
补充1:
我的日志代码如下:
Log.i("unitList.size", String.valueOf( ( unitList.size() ) ) );
Log.i("unitList",unitList.toString());
答案 0 :(得分:2)
如果只想检查列表中是否至少有一个元素,则可以使用列表中的isEmpty()函数。
但是,如果在不该返回的情况下返回true(并且很可能在返回空值时返回1),则很可能传递空字符串“”
答案 1 :(得分:2)
只需使用ArrayList的isEmpty()方法:
if (unitList.isEmpty()) /* ... */
else /* ... */
我认为它返回1,因为您正在分割字符串,结果数组中包含一个空字符串。 (我不确定100%)
答案 2 :(得分:0)
您的数组中有一个空的String元素
此代码未引发任何异常这一事实意味着该代码具有正在处理的某些字符串(大多数为空)。
unitList = new ArrayList<String>( Arrays.
asList(result.getJSONObject( position ).
getString( "units" ).replace("[", "").
replace("]", "").
split(",")));
如果确实split(“,”)确实在null字符串上运行,则会引发异常,因此可以确保它确实在空字符串上运行,这也会导致空字符串
答案 3 :(得分:0)
在分割结果字符串之前检查结果字符串是否为空,否则会得到带有空字符串的非空数组。
String str = result.getJSONObject(POSITION)
.getString("units")
.replace("[", "")
.replace("]", "");
unitList = str.isEmpty() ? Collections.emptyList() : Arrays.asList(str.split(","));