我是Java的新手。不幸的是,在Java中,很多新东西很难理解这些东西。
例如,
#db/seed.rb
categories = %w(cat1 cat2 cat3)
categories.each do |category|
Category.find_or_create_by(name: category)
end
$ git add .
$ git commit -a -m "Categories"
$ git push heroku master
$ heroku run rake db:seed
输出
String str = "";
String[] arr = str.split("\\s+");
System.out.println(Arrays.toString(arr));
System.out.println(arr.length);
System.exit(0);
但为什么呢?如果有人能解释为什么数组的长度为1,我将不胜感激。
答案 0 :(得分:10)
即使String实例为空,它仍然是一个String实例,并且"没有"必须放在split()
之后的某个地方。那是数组中的一个元素。
如果你打印str[0]
,你会得到一个空字符串。真实的"没什么"将是null
,但是您会得到NullPointerException
(您无法在空值上调用split()
)
答案 1 :(得分:7)
public static void main(String[] args) {
String str = "";
String[] arr = str.split("\\s+");
System.out.println(Arrays.toString(arr));
System.out.println(arr[0]);
System.out.println(arr.length);
System.exit(0);
}
<强>输出强>
[]
1
答案 2 :(得分:3)
让我们来看看Arrays.toString
的实施情况:
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i])); // Let's print that!
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
现在由于数组不为空,我们将进入for
循环。
我们首先将[
附加到结果中。然后我们追加String.valueOf(a[i])
。让我们尝试打印它:
String str = "";
String[] arr = str.split("\\s+");
System.out.println(String.valueOf(arr[0]));
你会看到输出是......什么都没有!所以最终的结果是:
[]
请注意,这与Java 8无关。split
方法已引入much earlier。