What's the simplest way to print a Java array?
在爪哇中,数组不重写EDCOX1×0,因此,如果您试图直接打印一个,则得到EDCOX1(2)所定义的EDCOX1×1的EXOCX1的"十六进制"。
1 2 | int[] intArray = new int[] {1, 2, 3, 4, 5}; System.out.println(intArray); // prints something like '[I@3343c8b3' |
但通常我们会想要更像
1 2 3 4 5 6 7 |
由于Java 5,您可以使用数组中的数组的EDCOX1、0、EDCOX1或1。注意,
实例:
- 简单数组:
输出:
1[John, Mary, Bob] - 嵌套数组:
1
2
3
4
5
6
7String[][] deepArray = new String[][] {{"John","Mary
<div class="suo-content">[collapse title=""]<ul><li>这也适用于多维数组。</li><li>如果我们有一个字符串数组,想要简单的输出,比如:<wyn>String[] array = {"John","Mahta","Sara"}</wyn>,我们想要这个没有括号和逗号的输出:<wyn>John Mahta Sara</wyn>?</li><li>@ Hengameh:还有其他几种方法可以做到这一点,但我最喜欢的是:JavaHooCalputo.com/Notes/Java.html数组数组ToSt.</li><li>仅供参考,<wyn>Arrays.deepToString()</wyn>只接受<wyn>Object []</wyn>(或扩展<wyn>Object</wyn>的类数组,如<wyn>Integer</wyn>,因此它不适用于<wyn>int []</wyn>类型的原始数组。但是对于原始数组,<wyn>Arrays.toString(<int array>)</wyn>工作得很好。</li><li>@亨加梅有一种方法专门用来解决这个问题。<wyn>System.out.println(String.join("", new String[]{"John","Mahta","Sara"}))</wyn>将打印<wyn>John Mahta Sara</wyn>。</li><li>@Dorukayhan实际上可以在这里省略显式实例化数组:<wyn>.join(...)</wyn>方法的<wyn>String.join("","John","Mahta","Sara")</wyn>将数组作为vararg参数。</li><li>先生,你是男人中的王子。</li></ul>[/collapse]</div><hr>
<p>
Always check the standard libraries first. Try:
</p>
[cc lang="java"]System.out.println(Arrays.toString(array));或者如果您的数组包含其他数组作为元素:
不过,对于"总是先检查标准库"这一点,我很高兴知道,我从来没有遇到过
Arrays.toString( myarray ) 的诀窍。--因为我专注于我的阵列的类型来看看如何做到这一点。我不想重复这件事:我想要一个简单的调用,使它的结果与我在Eclipse调试器和myArray.ToString()中看到的结果类似,只是没有这样做。
在JDK1.8中,可以使用聚合操作和lambda表达式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16如果你使用Java 1.4,你可以这样做:
(当然,这也适用于1.5+版本。)
从Java 8开始,还可以利用String类提供的EDCOX1×12方法来打印数组元素,不带括号,并用选择符分隔符(这是下面所示示例的空格字符):
1
2
3输出将是"嘿,朋友!".
数组字符串作为一个直接的答案,包括@esko在内的几家公司使用
Java 8流-收集器(联接()),Stream.forEachArrays.toString 和Arrays.deepToString 方法提供的解决方案,仅仅是最好的。下面我试着列出一些其他建议的方法,试图改进一点,其中最值得注意的是使用
Stream.collect 操作符,使用joining Collector 来模拟String.join 正在做什么。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18int[] ints = new int[] {1, 2, 3, 4, 5};
System.out.println(IntStream.of(ints).mapToObj(Integer::toString).collect(Collectors.joining(",")));
System.out.println(IntStream.of(ints).boxed().map(Object::toString).collect(Collectors.joining(",")));
System.out.println(Arrays.toString(ints));
String[] strs = new String[] {"John","Mary","Bob"};
System.out.println(Stream.of(strs).collect(Collectors.joining(",")));
System.out.println(String.join(",", strs));
System.out.println(Arrays.toString(strs));
DayOfWeek [] days = { FRIDAY, MONDAY, TUESDAY };
System.out.println(Stream.of(days).map(Object::toString).collect(Collectors.joining(",")));
System.out.println(Arrays.toString(days));
// These options are not the same as each item is printed on a new line:
IntStream.of(ints).forEach(System.out::println);
Stream.of(strs).forEach(System.out::println);
Stream.of(days).forEach(System.out::println);
在Java 8之前我们可以使用
爪哇8Arrays.toString(array) 打印一维数组,使用Arrays.deepToString(array) 打印多维数组。现在我们可以选择
Stream 和lambda 来打印阵列。打印一维数组:
1
2
3
4
5
6
7
8
9
10
11
12public static void main(String[] args) {
int[] intArray = new int[] {1, 2, 3, 4, 5};
String[] strArray = new String[] {"John","Mary","Bob"};
//Prior to Java 8
System.out.println(Arrays.toString(intArray));
System.out.println(Arrays.toString(strArray));
// In Java 8 we have lambda expressions
Arrays.stream(intArray).forEach(System.out::println);
Arrays.stream(strArray).forEach(System.out::println);
}输出是:
[1, 2, 3, 4, 5]
[John, Mary, Bob]
1
2
3
4
5
John
Mary
Bob打印多维数组为了防止打印多维数组,我们可以使用
Arrays.deepToString(array) 作为:1
2
3
4public static void main(String[] args) {
int[][] int2DArray = new int[][] { {11, 12}, { 21, 22}, {31, 32, 33} };
String[][] str2DArray = new String[][]{ {"John","Bravo"} , {"Mary","Lee
<div class="suo-content">[collapse title=""]<ul><li> 什么,如果我们有一个阵列中的字符串,和想要简单的输出;像:<wyn>String[] array = {"John","Mahta","Sara"}</wyn>,和我们希望这没有输出的支架和commas:<wyn>John Mahta Sara</wyn>吗? </li></ul>[/collapse]</div><hr><P><wyn>Arrays.deepToString(arr)</wyn>只在一行上打印。</P>[cc lang="java"]int[][] table = new int[2][2];为了让一张桌子打印成二维的桌子,我必须这样做:
1似乎
Arrays.deepToString(arr) 方法应该使用分隔符字符串,但不幸的是它没有。
1
2
3在Java中打印数组的不同方法:
简单方法
1
2
3
4
5
6
7List<String> list = new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
// Print the list in console
System.out.println(list);使用
toString() 。打印数组数组
1
2
3
4
5
6- 流:
Arrays.stream(intArray).forEach 。 方法参考:
::println 。
Output:
[One, Two, Three, Four]
Output: [One, Two, Three, Four]
Output: [[Ljava.lang.String;@1ad086a [[Ljava.lang.String;@10385c1,
[Ljava.lang.String;@42719c] [[Fifth, Sixth], [Seventh, Eighth]]
资源:访问阵列
在我看来,使用正则for循环是打印数组的最简单方法。这里有一个基于您的输入的示例代码
1 2 3 |
它将输出作为您的输出1, 2, 3,4, 5
在Java 8中很容易。有两个关键字
如果要在同一行中打印数组中的所有元素,那么只需使用
另一种没有方法引用的方法只是使用:
无论您使用哪种JDK版本,它都应该始终有效:
如果
例子:
1 | int[] a = new int[]{1,2,3,4,5}; |
替换为:
更新:
对!值得一提的是,将数组转换为对象数组或使用对象数组的成本很高,可能会降低执行速度。它发生在Java的本质上称为自动装箱。
因此,仅用于印刷目的,不应使用。我们可以制作一个函数,它以数组作为参数,并将所需的格式打印为
1 2 3 | public void printArray(int [] a){ //write printing code } |
我最近在《香草》杂志上偶然发现了这个帖子。写
请注意,这不是任何方式的永久性修复。只是一个可以简化调试的黑客。
直接打印数组会给出内部表示和哈希代码。现在,所有类都将
如果改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public String toString() { if (this instanceof boolean[]) return Arrays.toString((boolean[]) this); if (this instanceof byte[]) return Arrays.toString((byte[]) this); if (this instanceof short[]) return Arrays.toString((short[]) this); if (this instanceof char[]) return Arrays.toString((char[]) this); if (this instanceof int[]) return Arrays.toString((int[]) this); if (this instanceof long[]) return Arrays.toString((long[]) this); if (this instanceof float[]) return Arrays.toString((float[]) this); if (this instanceof double[]) return Arrays.toString((double[]) this); if (this instanceof Object[]) return Arrays.deepToString((Object[]) this); return getClass().getName() +"@" + Integer.toHexString(hashCode()); } |
通过向命令行添加以下内容,可以简单地将这个moded类添加到类路径中:
现在,随着Java 5的EDCOX1 5的可用性,EDCOX1的6度可以很容易地被更改为EDCOX1×5,以增加对包含其他数组的数组的支持。
我发现这是一个非常有用的黑客,如果Java可以简单地添加它,那就太棒了。我了解拥有非常大的数组的潜在问题,因为字符串表示可能有问题。可能通过类似于
要添加到所有答案中,将对象打印为JSON字符串也是一个选项。
使用杰克逊:
1 2 | ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); System.out.println(ow.writeValueAsString(anyArray)); |
使用Gson:
1 2 |
如果数组类型为char[],则还有一种方法:
1 2 3 |
印刷品
1 | abc |
我尝试过的一个简单快捷方式是:
1 2 3 4 |
它会打印出来
1 2 3 | 1 2 3 |
这种方法不需要循环,只适用于小型阵列
您可以在循环中遍历数组,打印出每个项。例如:
1 2 3 4 5 6 7 |
输出:
1 2 3 | item 1 item 2 item 3 |
打印数组的方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class printer { public static void main(String[] args) { String a[] = new String[4]; Scanner sc = new Scanner(System.in); System.out.println("enter the data"); for (int i = 0; i < 4; i++) { a[i] = sc.nextLine(); } System.out.println("the entered data is"); for (String i : a) { System.out.println(i); } } } |
对于每个循环,还可以使用打印数组元素:
1 2 3 |
Using org.apache.commons.lang3.StringUtils.join(*) methods can be an option
For example:
1 2 3 4 |
我使用了以下依赖项
1 2 3 | <groupId>org.apache.commons</groupId> commons-lang3</artifactId> <version>3.3.2</version> |
这被标记为用于打印字节[]的副本。注意:对于字节数组,可能还有其他合适的方法。
如果它包含ISO-8859-1字符,则可以将其打印为字符串。
1 2 3 4 |
或者如果它包含一个utf-8字符串
1 2 3 4 |
或者如果你想把它打印成十六进制。
1 2 3 4 |
或者如果你想把它打印成base64。
1 2 3 4 |
或者如果要打印一个有符号字节值数组
1 2 3 4 5 6 7 |
或者如果要打印一个无符号字节值数组
1 2 3 4 5 6 7 8 | String s = Arrays.toString( IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray()); System.out.println(s); // to reverse String[] split = s.substring(1, s.length() - 1).split(","); byte[] bytes2 = new byte[split.length]; for (int i = 0; i < bytes2.length; i++) bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check. |
1 2 3 4 5 6 |
1 2 3 4 5 6 |
在Java 8中:
如果使用commons.lang库,我们可以做到:
1 2 3 4 |
输出:
1 2 | {1,2,3,4,5} {John,Mary,Bob} |
有几种方法可以打印数组元素。首先,我将解释什么是数组?..array是存储数据的简单数据结构..定义数组时,在RAM中分配一组辅助内存块。这些内存块被占用一个单元。
好的,我将创建这样的数组,
1 2 3 4 5 6 7 8 |
现在看看输出,
您可以看到一个未知的字符串被打印出来。正如我前面提到的,其数组(数字数组)声明的内存地址被打印出来了。如果您想在数组中显示元素,可以使用"for loop",就像这样。
1 2 3 4 5 6 7 8 9 10 11 12 |
现在看看输出,
好,成功地打印了一维数组的元素。现在我要考虑二维数组。我将声明二维数组为"数字2",并使用"Surrest.StuttoStRun()"关键字打印元素。在使用之前,你必须导入"java. U.L.Star"库。
1 2 3 4 5 6 7 8 9 10 |
考虑输出,
同时,使用两个for循环,可以打印二维元素..谢谢!
如果您运行的是JDK 8。
1 2 3 4 5 6 7 8 9 |
输出:
1 | [7,3,5,1,3] |
如果要打印,可以使用
1 2 3 4 5 6 7 |
你可以用
打印数组的最简单方法是使用for循环:
1 2 3 4 5 |