StringBuilder不会附加空格吗?

时间:2013-06-26 05:16:44

标签: java

我正在使用Woodstock组件开发Web应用程序。简而言之,如果下拉值等于“PRIMARY KEY”,则该函数应将表的名称(从文本字段)存储到String pk / primaryKey中。

我目前面临的问题是从该功能获得的结果是:

"abc"

而不是

"a, b, c"

为什么会这样?

public void addPK(TextField tf, DropDown dd, StringBuilder pk, int val) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (val == 0) {
            pk.append((String) tf.getValue());
            val++;
        } else {
            pk.append(", " + (String) tf.getValue());
        }
    }
}


public String createButton1_action() {
    StringBuilder primaryKey = new StringBuilder();
    int pkCheck = 0;

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck);
    addPK(column_TF2, pkDropDown2, primaryKey, pkCheck);
    addPK(column_TF3, pkDropDown3, primaryKey, pkCheck);
    .
    .
}

谢谢。

3 个答案:

答案 0 :(得分:3)

调用方法'addPK'时,

pkcheck值始终为零。 S为每次调用后增加pkcheck值或者你可以用你的stringbuider长度值来che你可以改变你的方法

选项1.

public void addPK(TextField tf, DropDown dd, StringBuilder pk) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (pk.length()== 0) {
            pk.append((String) tf.getValue());
        } else {
            pk.append(", ").append((String) tf.getValue());
        }
    }
}


选项2.

public int addPK(TextField tf, DropDown dd, StringBuilder pk, int val) {
    if (((String) dd.getValue()).equals("PRIMARY KEY")) {
        if (val == 0) {
            pk.append((String) tf.getValue());
            val++;
        } else {
            pk.append(", " + (String) tf.getValue());
        }
    }
    return val;
}


public String createButton1_action() {
    StringBuilder primaryKey = new StringBuilder();
    int pkCheck = 0;

    pkCheck = addPK(column_TF1, pkDropDown1, primaryKey, pkCheck);
    pkCheck = addPK(column_TF2, pkDropDown2, primaryKey, pkCheck);
    pkCheck = addPK(column_TF3, pkDropDown3, primaryKey, pkCheck);
    .
    .
}

*如果您使用的是StringBuilder或StringBuffer,最佳做法是使用追加操作而不是'+'操作符

pk.append(", " + (String) tf.getValue());

替换为
    pk.append(", ").append((String) tf.getValue()); *

答案 1 :(得分:2)

因为您要发送值为0

的val参数
  int pkCheck = 0;   

    addPK(column_TF1, pkDropDown1, primaryKey, pkCheck); // value is 0 here

和addpK方法

if (val == 0) {
    pk.append((String) tf.getValue());
    val++;
}

因此,要获得所需的结果,您需要将pCheck的值设置为其他值而不是0

答案 2 :(得分:2)

你调试了吗? val始终保持0。在你的方法中修改它没有任何效果。

即。执行val++更改pkCheck


供参考:java-is-pass-by-value