附加逗号作为分隔符的Java字符串

附加逗号作为分隔符的Java字符串,java,string,string-concatenation,Java,String,String Concatenation,我需要将来自多个web服务调用的多个值附加到最后一个字符串中,并使用逗号作为分隔符 有些值可能为null,在这种情况下,我需要检查notnull,然后将其作为空字符串追加。 如果其中一个字符串没有值,则不应附加逗号 请帮我解决这个问题。这是我所做的代码 StringBuilder sb = new StringBuilder(); if (usersList.totalCount != 0 && usersList.tota

我需要将来自多个web服务调用的多个值附加到最后一个字符串中,并使用逗号作为分隔符

有些值可能为null,在这种情况下,我需要检查notnull,然后将其作为空字符串追加。 如果其中一个字符串没有值,则不应附加逗号

请帮我解决这个问题。这是我所做的代码

                StringBuilder sb = new StringBuilder();
            if (usersList.totalCount != 0 && usersList.totalCount >= 1) {
                logger.info("usersList.totalCount ----->"
                        + usersList.totalCount);
                for (KalturaUser user : usersList.objects) {
                    if (user.id != null) {
                        sb.append(userId);
                    }
                    if (user.firstName != null) {
                        sb.append(",").append(userFirstName);
                    }
                    if (user.lastName != null) {
                        sb.append(",").append(user.lastName);
                    }
                    if (user.email != null) {
                        sb.append(",").append(user.email);
                    }
                    if (user.roleNames != null) {
                        sb.append(",").append(user.roleNames);
                    }
                    if (user.partnerData != null) {
                        sb.append(",").append(user.partnerData);
                    }

                }
                System.out.println(sb);
            }
谢谢,
Raji

不清楚您的问题是什么,但如果您正在寻找更好或不同的方法,我发现最好将其附加到列表中,然后使用生成最终字符串。

我认为您正在寻找这样的方法:

public static String asString(Object value) {
    return value == null ? "" : value.toString();
}

for (KalturaUser user : usersList.objects) {
    sb.append(asString(user.id));
    sb.append(",").append(asString(user.firstName));
    sb.append(",").append(asString(user.lastName));
    sb.append(",").append(asString(user.email));
    sb.append(",").append(asString(user.roleNames));
    sb.append(",").append(asString(user.partnerData));
}

在你的测试中,比如

if (user.id != null) {
    sb.append(userId);
}
您正在检查user.id,但正在附加userId。这是两个不同的变量

你应该把它改成

if (user.id != null) {
    sb.append(user.id); //instead of sb.append(userId);
}

我会做那样的事。它基于Java8流,但这里不需要对每个属性执行非空检查。filter会为您执行此操作。我假设users.object是一个数组列表,如果不是,您可能需要以其他方式将其转换为流

if (userList.totalCount > 0) {
    logger.info("usersList.totalCount ----->" + usersList.totalCount);

    String result = userList
                    .objects
                    .stream()
                    .map(user -> {
                        return Stream.of(user.firstName, user.id, user.lastName, user.email, user.roleNames, user.partnerData) //get the properties you need into the stream
                                        .filter(property -> property != null) // filter out null properties
                                        .collect(Collector.joining(",")); //join them by comma
                    })
                    .collect(Collector.joining(",")); //join user strings with comma

    System.out.println(result);
}

您可以使用google库中名为Joiner的类

String concatenedString = Joiner.on(",").skipNulls().join(itemToAdd);

您可以在google-collections-1.0.jar上找到这个类,您已经这样做了。你现在的代码有什么问题吗?我不知道发生了什么:输出是:null,null,null,null,null,null,admin,james。smith@kaltura.compw=f865b53623b121fd34ee5426c792e5c33af8c227,空,空,带,pw=7c4a8d09ca3762af61e59520943dc26494f8941b,123456空,空,法恩斯沃思,pacoh@mx1.ibm.com,,pw=9bc34549d565d9505b287de0cd20ac77be1d3f2c,null,null,Peleg,,,pw=64c1a55c1af56bc31d1e1480390737678577ef10,null,null,Colodny,david。colodny@kaltura.com,pw=e0c93ecb0f02f2ca30af9f5edea91c1a328705a8,null,null,好的,在if user.id中!=无效的{sb.appenduserId;您正在测试user.id,但正在追加userId。@Suresh-如果该值不存在,则对于某些字符串它将为null,对于某些字符串它将为空。因此,最终的输出与上面的一样。@Pshemo-是的。我修改了代码,现在很好。谢谢。是的……我犯了一个错误。谢谢。现在很好。@RajyalakshmiS,如果这是唯一的错误的话问题和您的代码现在运行良好,您应该将此问题标记为解决了您的问题。