[英]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.