2015-10-07 233 views
-1

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

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

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

   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

+1

你已经做到了。你现在的代码有什么问题? –

+1

有什么问题? – yogidilip

+0

我没有收到发生的事情:输出为:NULL,NULL, NULL,NULL, NULL,NULL,管理,james.smith @ kaltura.com ,, PW = f865b53623b121fd34ee5426c792e5c33af8c227, NULL,NULL,人Bandel ,,, PW = 7c4a8d09ca3762af61e59520943dc26494f8941b,123456 NULL,NULL,法恩斯沃思,pacoh @ mx1.ibm.com ,, PW = 9bc34549d565d9505b287de0cd20ac77be1d3f2c, NULL,NULL,法勒,,, PW = 64c1a55c1af56bc31d1e1480390737678577ef10, NULL,NULL,Colodny,david.colodny @ kaltura。 com,pw = e0c93ecb0f02f2ca30af9f5edea91c1a328705a8, null,null, –

回答

1

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

2

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

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

那么,在你的测试,如

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

要检查user.id,但附加userId。这是两个不同的变量。

你或许应该把它变成

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

是的......我犯了一个错误。谢谢。现在好了。 –

+0

@RajyalakshmiS如果这是唯一的问题,你的代码现在可以正常工作,那么应该将这个问题标记为[接受其中一个答案](http://meta.stackexchange.com/a/5235/186652)解决了你的问题。 – Pshemo

0

我会做这样的事情。它基于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); 
} 
0

您可以使用一个类从叫乔伊纳一个谷歌库。

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

你可以找到这个类谷歌的集合-1.0.jar