返回Ljava.lang.Object的String值

时间:2012-08-31 09:55:25

标签: java string object

我有以下代码

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

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

  

Object类的toString方法返回一个由。组成的字符串   对象是实例的类的名称,at-sign   字符“@”,以及散列的无符号十六进制表示   对象的代码。换句话说,此方法返回一个相等的字符串   价值:

     

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

但是你怎么把这个值当作String?

9 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

字符串的 toString()方法是 defalut重载,因此问题不在于字符串路径,而是尝试查看TreePath tp.

我认为您需要查看tp

答案 2 :(得分:0)

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

getClass().getName() + '@' +Integer.toHexString(hashCode()) toString()方法的默认实现,但您可以覆盖它,如果您需要更好的表示(请记住,您需要在您的情况下扩展TreePath

编辑:我想,我现在明白了:

由于TreePath.getPath()返回一个对象数组,因此输出中会得到java.lang.Object

答案 3 :(得分:0)

作为树组件的对象需要覆盖其toString()方法。您可以使用它返回的任何内容覆盖它。我假设您正在向树中添加自定义对象,以便您控制该对象及其toString()方法

答案 4 :(得分:0)

如果你想得到一个逗号分隔的值,你可以做

String path = new ArrayList(tp.getPath())。toString();

答案 5 :(得分:0)

尝试这样的事情:

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

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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方法