我正在使用此代码从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
答案 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()