【问题标题】:Returning String value of Ljava.lang.Object返回 Ljava.lang.Object 的字符串值
【发布时间】:2012-08-31 09:55:25
【问题描述】:

我有以下代码

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

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

Object 类的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,at 符号 字符“@”和哈希的无符号十六进制表示 对象的代码。换句话说,这个方法返回一个字符串等于 值:

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

但是你实际上是如何将这个值作为字符串来获取的呢?

【问题讨论】:

    标签: java string object


    【解决方案1】:

    getPath() 返回一个字符串值数组,表示树中的组件。如果你需要根的字符串表示,你会做 getPath()[0];

    【讨论】:

    • 以为.getPath返回Object而不是Object[],应该多加注意!!
    【解决方案2】:

    String的toString()方法是默认重载,所以问题不在于String路径,而是试试看TreePath tp.

    我觉得你需要看看tp

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果你想得到一个逗号分隔的字符串,你可以这样做

          字符串路径 = new ArrayList(tp.getPath()).toString();

          【讨论】:

            【解决方案6】:

            试试这样的:

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

            【讨论】:

              【解决方案7】:

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

              toString这些你需要使用Arrays.toString()

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-11-21
                    • 2020-06-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-07-24
                    相关资源
                    最近更新 更多