将字符串数组列表转换为一个逗号分隔的字符串

3
尝试将字符串的ArrayList转换为一个大的逗号分隔字符串。 但当我使用以下代码时:
String joined = TextUtils.join(", ", participants);

调试器显示参与者的大小为4,但加入的值为空字符串

enter image description here

private ArrayList<String> participants;

不确定出了什么问题?

在此输入图片描述

更新:

List<String> list = new ArrayList<>();
list.add("Philip");
list.add("Paul Smith");
list.add("Raja");
list.add("Ez");

String s = TextUtils.join(", ", list);

这适用于我手动填充列表时的情况,但下面是代码目前的工作方式。
在onCreate()方法中:
callApi(type);
String s = TextUtils.join(", ", participants);
getSupportActionBar().setTitle(s);

在callAPI()函数中:
JSONArray participantsR = sub.getJSONArray("referralParticipants");

Log.e("Participants length ", String.valueOf(participantsR.length()));

for (int i = 0; i < participantsR.length(); i++)
{
    JSONObject object = participantsR.getJSONObject(i);
    String firstname = (String) object.get("fullName");
    participants.add(firstname);
    Log.e("Times", String.valueOf(i));
}
4个回答

18

我正在尝试复现你的错误,但是无法做到。这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_temp);

    List<String> list = new ArrayList<>();
    list.add("Philip Johnson");
    list.add("Paul Smith");
    list.add("Raja P");
    list.add("Ezhu Malai");

    String s = TextUtils.join(", ", list);

    Log.d(LOGTAG, s);
}

我的输出结果如预期一样是Philip Johnson, Paul Smith, Raja P, Ezhu Malai

您是否导入了正确的TextUtils类?

android.text.TextUtils;

鉴于新的信息,这是我的方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_temp);

    callApi(type, new OnResponseListener<List<String>>() {
        @Override public void onResponse(List<String> list) {
            getSupportActionBar().setTitle(TextUtils.join(", ", list));
        }
    });
}

我不知道你使用的网络库是什么,但你可能需要定义一个OnResponseListener接口。这很容易:
public interface OnResponseListener<T> {
    public void onResponse(T response);
}

接下来,您需要修改callApi函数,使其接受OnResponseListener>的实例,并在完成调用后调用其onResponse方法。

我建议您研究Volley库,并阅读Android文档中关于简单网络调用的部分。


我只是按照你的方式复制了它,然后它就起作用了。但是我正在添加来自API调用的数组。当我将列表替换为从API更新的列表时,它就不再显示连接对象中的任何内容。即使该列表有4个字符串元素。 - Adilp
我已经更新了我的问题,并附上更多代码,说明我的列表是如何被填充的。 - Adilp
1
你应该发布你的网络调用代码。我猜发生的情况是在执行连接操作之前没有等待调用完成,因此你正在使用一个空列表进行连接。在调试时看起来不会像这样,因为网络线程将继续运行并在你打开调试工具时填充列表。 - MrMannWood
谢谢,我忘记了。我有一个处理程序,我把代码放在那里,现在一切都正常了! - Adilp

1
我使用Apache Common Utilities的StringUtils.join
代码非常简单,就像你想要的那样。
StringUtils.join(participants,", ");

我的使用体验非常完美。 编辑 根据请求,这里是StringUtils.java文件,供那些只想使用这个单一实用程序类而不是整个库的人使用。

我同意这个答案,但是Android有Dex限制,而Apache Commons是一个庞大的库。 - MrMannWood
只需使用单个StringUtils类即可,无需包含整个库。 - Aritra Roy
为了我自己的利益,我不知道如何从一个库中只导入一个类。你介意给出一个示例吗? - MrMannWood
已更新问题,仅包含单个类文件。只需将此类复制粘贴到您的项目中,即可使用。如果有帮助,请点赞。 - Aritra Roy

1

试着用 Kotlin

val commaSeperatedString = listOfStringColumn.joinToString { it -> 
 "\'${it.nameOfStringVariable}\'" }

// 输出:'一','二','三','四','五'


0

我不知道TextUtils是做什么的。这将完成它。

StringBuffer sb = new StringBuffer();
for (String x : participants) {
    sb.append(x);
    sb.append(", ");
}
return sb.toString();

很简单,只需使用它。


它返回了“”。participants仍然有4个字符串对象。 - Adilp

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