繁体   English   中英

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

[英]Java String appending with comma as a separator

我有一个要求,我需要将多个Web服务调用中的多个值附加到一个以逗号为分隔符的最终字符串中。

一些值可能为null,在这种情况下,我需要检查是否为非null,然后将其附加为空字符串。 如果该字符串之一没有值,则逗号不应附加。

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

                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);
            }

谢谢,拉吉

我认为您正在寻找这样的东西:

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);
}

目前尚不清楚您的问题是什么,但是如果您正在寻找更好的方法或其他方法,我发现最好追加到List <String>,然后使用StringUtils.join生成最终字符串。

我会那样做。 它基于Java8流,但是在这里,您不需要对每个属性进行非null检查( .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中找到此类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM