7

这是我在 Stackoverflow 上的第一个问题,所以如果您在我的第一篇文章中发现任何荒谬之处,请多多包涵。仅供参考,我已经阅读了 SO 常见问题解答,并且我知道它的各种政策。你看,我是一个大量使用 PHP、Perl、Python、ROR 等语言的人,最近我“上下文切换”到了 Java EE。你看,我研究过的几种语言都有一个结构,它使我能够递归地转储聚合结构的内容,而无需 for/foreach/for..in 循环

例如,

a = 任何复合数据结构

PHP有

var_dump() 和 print_r()

Perl 有

数据::自卸车

ROR 有

漂亮的打印

和 Python 有

打印模块
.

所以我的问题是,

Java 世界中是否存在与这些类​​似的东西?当我使用这些语言(PHP/Perl/Python/ROR)中的任何一种来转储复合数据结构的内容以检查它的外观然后进一步处理它(或决定如何处理)时,我发现它非常方便。进一步处理)

如果我的帖子忽略了任何 SO 规则,感谢您的时间和道歉。

4

3 回答 3

1

java.util集合将toString()递归地转储列表/集合/映射等的详细信息。这要求存储在集合中的对象toString()定义了有用的 s。

然而,它对数组不适用,因为 Java 没有对toString()数组有用的默认值。如果您知道您正在处理一个数组,那么您可以使用Arrays.deepToString()实用程序方法(有关更多详细信息,请参阅guido 的回复)。

例如,这段代码:

final Map<String, Object> map = new HashMap<String, Object>();
final List<String> nested = Arrays.asList("foo", "bar", "baz");

map.put("given", "Arthur");
map.put("family", "Dent");
map.put("nested", nested);

System.out.println(map);

产生这个:

{nested=[foo, bar, baz], given=Arthur, family=Dent}
于 2012-06-14T05:37:41.287 回答
0

您可以使用java.util.Arrays类中的实用程序静态方法:

public static String toString(Object[] a)
ie: String dump = Arrays.toString(array);

返回指定数组内容的字符串表示形式。

如果数组包含其他数组作为元素,它们会通过继承自 Object 的 Object.toString() 方法转换为字符串,该方法描述的是它们的标识而不是它们的内容。

此方法返回的值等于 Arrays.asList(a).toString() 将返回的值,除非 a 为 null,在这种情况下返回“null”。

public static String deepToString(Object[] a)
ie: String dump = Arrays.deepToString(array);

返回指定数组的“深层内容”的字符串表示形式。如果数组包含其他数组作为元素,则字符串表示包含它们的内容等等。此方法设计用于将多维数组转换为字符串。

字符串表示由数组元素的列表组成,括在方括号 ("[]") 中。相邻元素由字符“,”(逗号后跟一个空格)分隔。元素通过 String.valueOf(Object) 转换为字符串,除非它们本身是数组。

在集合的情况下,您可以使用方法 toArray():

 List<YourObject> list = .....
 YourObject[] array = list.toArray(new YourObject[0]);
 String dump = Arrays.deepToString(array);
于 2012-06-14T05:36:26.083 回答
0

根据您的目的,我假设它是调试代码或探索复杂的数据结构,不要打印.

使用良好的 UI 调试器,例如 IntelliJ 或(颤抖,请不要)eclipse 中的调试器。与您列出的其他语言相比,Java 有一套更成熟、更完整的工具可供开发人员使用(我也使用过其中的大多数语言)。Php、Perl 等是原始的,出于某种原因,人们一直期望在简单的文本编辑器中进行开发。Java 不是那样工作的(至少如果你想保持清醒或者正在从事比玩具项目更大的工作)。

使用功能齐全的 IDE,它内置调试器。

在您列出的其他 IDE 中,IDE 并不是一个很好的选择,而且调试集成充其量也很糟糕……这实际上是 Java 的主要优势之一。

于 2014-03-10T16:02:13.117 回答