【问题标题】:How to remove the last separator in toString()如何删除 toString() 中的最后一个分隔符
【发布时间】:2013-11-05 07:24:35
【问题描述】:

我正在组合两个矩阵:

矩阵A =

719.0 501.0 -75.0
501.0 508.0 -62.0
-75.0 -62.0 10.0

矩阵B =

-19.0 -19.0 -19.0 -19.0 -19.0 -19.0 -19.0 -19.0 -19.0 -19.0
-20.0 -20.0 -20.0 -20.0 -20.0 -20.0 -20.0 -20.0 -20.0 -20.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

矩阵A#矩阵B- 使用 # 和

组合

使用, 和

分隔行

使用|分隔元素

我的 toString 代码是:

public String toString() {
        String separator = "|";
            StringBuffer result = new StringBuffer();

        for (int k = 0; k < keys.length; k++) {
                 for(int l = 0; l < keys[k].length; l++){
                result.append(keys[k][l]);
                result.append(separator);
            }
           result.setLength(result.length() - separator.length());
            // add a line break.
            result.append(",");
        }
       result.append("#");
        for (int i = 0; i < values.length; i++) {
           for(int j = 0; j < values[i].length; j++){
                result.append(values[i][j]);
                result.append(separator);
            }
            // remove  separator
            result.setLength(result.length() - separator.length());
            // add a line break.
            result.append(",");
        }
      return result.toString();
    }

我的结果是:

719.0|501.0|-75.0,501.0|508.0|-62.0,-75.0|-62.0|10.0,#-19.0|-19.0|-19.0|-19.0|-19.0|-19.0|-19.0|- 19.0|-19.0|-19.0,-20.0|-20.0|-20.0|-20.0|-20.0|-20.0|-20.0|-20.0|-20.0|-20.0,0.0|0.0|0.0|0.0|0.0|0.0| 0.0|0.0|0.0|0.0,

如何去掉最后一个分隔符?

【问题讨论】:

  • if(i!=(values.length)-1) {result.append(",");}
  • 这是一个典型的用例,您应该更喜欢StringBuilder 而不是StringBuffer。

标签: java tostring


【解决方案1】:

您可以通过获取没有最后一个元素的子字符串来简单地删除它。

return result.substring(0, result.length() - 1);

【讨论】:

  • +1,但toString 是多余的。 substring可以直接在StringBuffer上使用。
  • @MarounMaroun - 你已经编辑了答案。我实际上并没有意识到这一点。无论如何,现在编辑它!谢谢:)
  • 反对者,愿意发表评论吗?!我不介意你的反对意见,但你能给出你的指点,以便我改进这篇文章吗?
  • 如果不是StringBuffer上的最后一个操作,可以在继续之前使用result.setLength(result.length()-1);。
【解决方案2】:

您可以将分隔符添加到下一个实体的开头,而不是在实体(行、元素等)的末尾添加分隔符。

例如,对于,,您可以这样做:-

for (int k = 0; k < keys.length; k++) {

    // add a line break.
    if (k != 0)
        result.append(",");

    for(int l = 0; l < keys[k].length; l++){
        result.append(keys[k][l]);
        result.append(separator);
    }
}

【讨论】:

    【解决方案3】:
    result.toString().replaceAll(",$", "");
    

    【讨论】:

      【解决方案4】:

      我相信你应该能够添加一个 if 条件来检查 i/k 的值,并根据它添加一个 (,)。

      【讨论】:

        猜你喜欢
        • 2013-01-17
        • 1970-01-01
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多