使用 StringBuilder 进行字符串拼接

13

我有5个复选框,需要选择多个复选框。

我写了下面的代码来检查复选框是否被选中:

sports=(CheckBox)findViewById(R.id.sports_btn);
sports.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        if (sports.isChecked() == true)
        list.add("4");
    }
}); 
我正在向一个数组列表中添加一个值:
list ArrayList<String> list = new ArrayList<String>();

我正在以字符串形式检索该值:

StringBuilder sb = new StringBuilder();
for(int  i =0; i < list.size(); i++)
{
    for (String str: list)
    {  
        sb.append(str.toString());
        sb.append(",");
    }

}
String sel_cat = sb;

我已经得到了字符串,但如果选择了两个值,它会变成2,3, 如何去掉最后的逗号?我不想要最后的逗号,字符串应该是2,3。


1
在我看来,你最好使用已经编写和测试过的代码,而不是自己编写,因此我建议使用开源的Apache字符串实用程序库。 - John Sobolewski
6个回答

37
StringBuilder sb = new StringBuilder();
sb.deleteCharAt(sb.length()-1) 

或者在你的代码中使用

StringBuilder sb = new StringBuilder();

for(int  i =0;i<list.size();i++)
{
    String prefix = "";
    for (String str : list)
    { 
        sb.append(prefix);
        prefix = ",";
        sb.append(str);  
    }
}

String sel_cat = sb;

取消了我的反对票,因为我不明白为什么在append()调用中使用str.toString()。难道它不已经是一个String吗?另外,最后一行String sel_cat = sb;会编译吗? - Saro Taşciyan

5
您可以添加条件进行检查:
for (String str : list)
{
   sb.append(str.toString());
   if (i!=list.size()-1)
   {
     sb.append(",");
   }
}

那也是我的第一步,但它需要在每次迭代中都有一个条件。 - MByD

3
您可以将字符串数组放在条件中:
String list[]=new String[]{"A","C","D","F"};

public String print(String arr[]){

    StringBuilder sb = new StringBuilder();
    String prefix = "";
    for (String str : arr)
    { 
        sb.append(prefix);
        prefix = ",";
        sb.append(str);  
    }

    System.out.println("WithCommas"+sb);
    return sb;
}

1
你可以使用 deleteCharAt:
StringBuilder sb = new StringBuilder();
for(int  i =0;i<list.size();i++)
{
    for (String str : list)
    {  
        sb.append(str); // str is already a String, no need for toString()
        sb.append(",");
    }
}
if (sb.length() > 0) {
    sb.deleteCharAt(sb.length()-1);
}
String sel_cat=sb;

0
另一个选择是查看{{link1:StringUtils#join(Object\[\], String, int, int)}}:
有一个连接方法,可以将数组与分隔符放在一起...
例如:
 StringUtils.join([null, "", "a"], ',')   // creates... ",,a"

-3
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ScrollView;
import android.widget.TimePicker;

你好,欢迎来到StackOverflow。请不要仅仅把代码作为答案发布,解释一下你正在做什么,这样人们才能理解如何解决问题。谢谢。 - Cthulhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接