如何控制在字符串迭代中添加分隔符(,)

时间:2015-08-20 00:54:16

标签: java

我正在使用此代码从arraylist获取值。检索完数据后,我想在它之后连接一个(,)。如果检索到的数据将使整个字符串的长度计数大于160,则数据的串联将停止。之后,我想停止添加逗号,因为之后没有数据。我怎样才能做到这一点?

$('.main').click(function(){
   $('ul',this).slideToggle('fast');

    // slide up the current active ul
    $('ul','.main').not($('ul',this)).slideUp('fast');

    $('span',this).toggleClass('arrow-up arrow-down');

    $('span','.main').not($('span',this)).toggleClass('arrow-up arrow-down');

    }

输出

  

RBSN / C1 / 12/3/4/8,CVTE / C1 / 2/3/4/1,RBSN / C1 / 4 /331分之2131/ 12,RBSN / C1 / 45/67 /44分之12 ,RBSN / C1 /231分之44/二万三千二百一十三分之一百二十三,RBSN / C1 / 444 /222分之55522/ 11,RBSN / C1 / 123/123 /1231232分之213123,

     

在最后连接的数据之后有一个逗号。   总字符串长度: 146

预期输出

  

RBSN / C1 / 12/3/4/8,CVTE / C1 / 2/3/4/1,RBSN / C1 / 4 /331分之2131/ 12,RBSN / C1 / 45/67 /44分之12 ,RBSN / C1 /231分之44/二万三千二百一十三分之一百二十三,RBSN / C1 / 444 /222分之55522/ 11,RBSN / C1 / 123/123 /1231232分之213123

     

最后一个数据连接后没有逗号。   总字符串长度: 145

6 个答案:

答案 0 :(得分:1)

在添加元素之后添加逗号,而不是在之前添加逗号,这样您最后就不会有逗号。

List<Pending> pending = db.getAllPending();
List<String> resultingStrings = new ArrayList<String>();
String a = "";
for (Pending pn : pending) {
  if (a.length() + pn.getPm_str().length() < 160) { // < to leave room for the comma as well
        if(a.length() != 0) { // don't add a comma before the first 1
          a+=",";
        }
        a+=pn.getPm_str();
  } else {
        resultingStrings.add(a);
        a = pn.getPm_str();
  }
}
resultingStrings.add(a);

答案 1 :(得分:0)

在else语句中添加一行:

List<Pending> pending = db.getAllPending();
List<String> resultingStrings = new ArrayList<String>();
String a = "";

for (Pending pn : pending) {
    if (a.length() + pn.getPm_str().length() <= 160) {
        a+=pn.getPm_str();
        a+=",";
    }
    else {
        a = a.substring(0, a.length()-1)  <-----
        resultingStrings.add(a);
        a = pn.getPm_str();
    }
}
resultingStrings.add(a);

答案 2 :(得分:0)

这称为尾随逗号问题。有很多方法可以解决这个问题。

一种方法是取最后一个字符串,然后删除最后一个字符:

s = s.substring(0, s.length()-1);

另一种方法是将循环转换为常规for循环,并在添加逗号之前检查它是否在最后。

 List<Pending> pending = db.getAllPending();
 List<String> resultingStrings = new ArrayList<String>();
 String a = "";
 for (int i = 0; i < pending.size(); i++) {
     Pending p = pending.get(i);
     if (a.length() + pn.getPm_str().length() <= 160) {
         a+=pn.getPm_str();
         if(i != pending.size()-1){
             a+=",";
         }
     } else {
         resultingStrings.add(a);
          a = pn.getPm_str();
     }
 }
 resultingStrings.add(a);

答案 3 :(得分:0)

使用StringBuilder。字符串准备好后,删除最后一个字符,将其强制转换为字符串,然后就可以得到答案。

List<Pending> pending = db.getAllPending();
 List<String> resultingStrings = new ArrayList<String>();
 StringBuilder a = new StringBuilder;
 for (Pending pn : pending) 
     if (a.length() + pn.getPm_str().length() <= 160) {
         a.append(pn.getPm_str()).append(",");
     }
     else {
         a.deleteCharAt(a.length());
         resultingStrings.add(a);
         a = new StringBuilder();
         a.append(pn.getPm_str());
     }
 a.deleteCharAt(a.length());
 resultingStrings.add(a.toString());

答案 4 :(得分:0)

使用StringBuilder(为了提高效率),只在必要时插入逗号。

List<Pending> pending = db.getAllPending();
List<String> resultingStrings = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (Pending pn : pending) {
    final String str = pn.getPm_str();
    if (sb.length() > 0) {
        sb.append(',');
    }
    if (sb.length() + str.length() <= 160) {
        sb.append(str);
    } else {
        resultingStrings.add(sb.toString());
        sb.setLength(0);
        sb.append(str);
    }
}
resultingStrings.add(sb.toString());

答案 5 :(得分:0)

为什么不直接添加到<div id="output"></div>列表?由于List存储以逗号分隔的字符串,因此您无需自己执行此操作。您可以使用resultingString计算存储的字符串的长度。

resultingString.toString().length()