繁体   English   中英

返回Ljava.lang.Object的字符串值

[英]Returning String value of Ljava.lang.Object

我有以下代码

TreePath tp = jTree.getSelectionPath();
String path = tp.getPath().toString();

这会将路径设置为Ljava.lang.Object;@33530691 ,我知道这是因为

Object类的toString方法返回一个字符串,该字符串包括该对象是其实例的类的名称,符号字符“ @”以及该对象的哈希码的无符号十六进制表示形式。 换句话说,此方法返回的字符串等于:

getClass()。getName()+'@'+ Integer.toHexString(hashCode())

但是,实际上如何获得此值作为String?

getPath()返回表示树中组件的String值数组。 如果需要根的String表示形式,则将执行getPath()[0];。

String的 toString()方法默认是重载的 ,因此问题不在String路径上,而是尝试查看TreePath tp.

我认为您需要看一下tp

我不太明白你的问题。 您发布的报价中是否已经回答了这个问题?

getClass().getName() + '@' +Integer.toHexString(hashCode()) toString()方法的默认实现,但是,如果需要更好的表示形式,则可以重写该方法(请记住,在您的情况下扩展TreePath )。

编辑:我想,我现在了解:

由于TreePath.getPath()返回一个对象数组,因此您将在输出中获得该java.lang.Object

作为树的组成部分的对象需要重写其toString()方法。 您可以用返回的任何内容覆盖它。 我想您正在向树中添加一个自定义对象,以便您可以控制该对象及其toString()方法

如果要获取逗号分隔的值字符串,可以执行

字符串路径=新的ArrayList(tp.getPath())。toString();

尝试这样的事情:

Object[] treeNodes = tp.getPath();
StringBuilder sb = new StringBuilder();
for(Object tn : treeNodes) {
    sb.append(File.separatorChar).append(tn.toString());
}
String path = sb.toString();

您有一个对象数组(可能都是字符串)

toString这些,您需要使用Arrays.toString()

String path = Arrays.toString(tp.getPath());

如果仅用于输出/记录,我猜想Arrays.asList(tp.getPath()).toString()就足够了。

TreePath对象代表从根节点到实际节点的整个路径。 如果在其上调用getPath ,它将返回一个数组,其中包含根节点和实际选定的节点,以及介于两者之间的所有节点。

如何获取“正确的字符串”取决于您实际想要实现的目标:

  • 如果要使用实际选定节点的字符串表示形式,请使用getLastPathComponent方法

     TreePath tp = jTree.getSelectionPath(); String path = tp.getLastPathComponent().toString(); 
  • 如果您想要完整的路径,则必须遍历数组

     TreePath tp = jTree.getSelectionPath(); StringBuilder pathBuilder = new StringBuilder(); for( Object node : tp.getPath() ){ pathBuilder.append( node.toString() ); //possibly append a separator as well } String path = pathBuilder.toString(); 

    或者只是在tp.getPath()上使用Arrays#toString方法而不是toString方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM