今天看到一篇有意思的博客,名为《打印Java数组最优雅的方式是什么?》点进去看了一下,感觉蛮有意思的,故自己也手敲的玩了一下,在此做一个分享。
// 定义一个string数组
String[] title = {"我是","菜鸟","Java","程序猿","八日蝉"};
// 直接打印
System.out.println(title); // 结果是该数组的类型名+hashCode(一般人可看不懂!)
一、使用 for 循环
// 方法一:万能的for循环
//普通for
for(int i = 0; i < title.length; i++){
System.out.println(title[i]);
}
//增强for
for (String s:title) {
System.out.println(s);
}
一点也不优雅,甚至有点low
二、使用 Stream
如果使用的是 JDK8 以上的版本,我们可以使用 Stream 这种时髦、fashion 的方式来遍历数组,顺带将其打印出来。
// 方法二:使用时髦的Stream
//第一种:lambda表达式加持
Arrays.asList(title).stream().forEach(s -> System.out.println(s));
//第二种
Stream.of(title).forEach(System.out::println);
//第三种
Arrays.stream(title).forEach(System.out::println);
虽然看起来高级,但结果并不是很优雅
三、使用 Arrays.toString()
Arrays.toString() 可以将任意类型的数组转成字符串,包括基本类型数组和引用类型数组
// 方法三:使用Arrays.toString()
System.out.println(Arrays.toString(title));
//若需要打印多维数组
String[][] titles = new String[][]{{"我是","菜鸟"},{"Java","程序猿","八日蝉"}};
System.out.println(Arrays.deepToString(titles));
真的很优雅
顺便再来看一下 toString() 方法的源码。
public static String toString(Object[] a) {
if (a == null)
return "null";
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">int</span> iMax = a.length - <span class="hljs-number" style="color: #008080; line-height: 26px;">1</span>;
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">if</span> (iMax == -<span class="hljs-number" style="color: #008080; line-height: 26px;">1</span>)
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">return</span> <span class="hljs-string" style="color: #d14; line-height: 26px;">"[]"</span>;
StringBuilder b = <span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">new</span> StringBuilder();
b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">'['</span>);
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">for</span> (<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">int</span> i = <span class="hljs-number" style="color: #008080; line-height: 26px;">0</span>; ; i++) {
b.append(String.valueOf(a[i]));
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">if</span> (i == iMax)
<span class="hljs-keyword" style="color: #333; font-weight: bold; line-height: 26px;">return</span> b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">']'</span>).toString();
b.append(<span class="hljs-string" style="color: #d14; line-height: 26px;">", "</span>);
}