从字符串数组中删除逗号

时间:2010-06-09 06:19:18

标签: java sql

我想执行一个类似的查询  从“xyz_DB”中选择ID。“test”用户所在的位置('a','b')

所以相应的代码就像

String s="(";
for(String user:selUsers){
    s+= " ' " + user + " ', ";
}
s+=")";

从test中选择ID,其中userId位于s;

以下代码将s的值形成为('a','b',) 我想在数组结束后删除逗号怎么做?

10 个答案:

答案 0 :(得分:4)

以下是一种方法:

String s = "(";
boolean first = true;
for(String user : selUsers){
    if (first) {
        first = false;
    } else {
        s += ", ";
    }
    s += " ' " + user + " '";
}
s += ")";

但如果涉及循环,使用StringBuilder组装String会更有效。

StringBuilder sb = new StringBuilder("(");
boolean first = true;
for(String user : selUsers){
    if (first) {
        first = false;
    } else {
        sb.append(", ");
    }
    sb.append(" ' ").append(user).append(" '");
}
sb.append(")");
String s = sb.toString();

答案 1 :(得分:3)

这就是诀窍。

String s = "";
for(String user : selUsers)
    s += ", '" + user + "'";

if (selUsers.size() > 0)
    s = s.substring(2);

s = "(" + s + ")";

但是,一些指示:

  • 在连接这样的字符串时,建议您使用StringBuilderappend
  • 如果这是SQL查询的一部分,您可能希望清理用户名。有关说明,请参阅xkcd: Exploits of a Mom

为了好玩,斯蒂芬C答案的一个变种:

StringBuilder sb = new StringBuilder("(");
boolean first = true;
for(String user : selUsers){
    if (!first || (first = false))
        sb.append(", ");
    sb.append('\'').append(user).append('\'');
}
sb.append(')');
你甚至可以像这样做循环: - )

for(String user : selUsers)
    sb.append(!first || (first=false) ? ", \'" : "\'").append(user).append('\'');

答案 2 :(得分:1)

使用带有索引的循环的“旧样式”,然后在除最后一个用户名之外的每个用户名上添加逗号:

    String[] selUsers = {"a", "b", "c"};
    String s="("; 
    for(int i = 0; i < selUsers.length; i++){
        s+= " ' " + selUsers[i] + " ' ";  
        if(i < selUsers.length -1){
            s +=" , ";
        }
    }
    s+=")";

但正如其他人已经提到的那样,在连接字符串时使用StringBuffer:

    String[] selUsers = {"a", "b", "c"};
    StringBuffer s = new StringBuffer("("); 
    for(int i = 0; i < selUsers.length; i++){
        s.append(" ' " + selUsers[i] + " ' ");  
        if(i < selUsers.length -1){
            s.append(" , ");
        }
    }
    s.append(")");

答案 3 :(得分:1)

从apache commons使用StringUtils.join

答案 4 :(得分:1)

在添加尾随')'之前,如果它是逗号,我将去除字符串的最后一个字符,或者只是用右括号替换尾随逗号 - 在伪代码中,类似

if s.last == ',' then
  s = s.left(s.length() - 1);
end if;

s = s + ')';

if s.last == ',' then
  s.last = ')';
else
  s = s + ')';
end if;

分享并享受。

答案 5 :(得分:0)

我会s+= " ,'" + user + "'";(将逗号放在值之前)并在循环中添加一个计数器,如果计数器为s = "'" + user + "'";(或1,我只需0 },取决于你开始计算的地方)。

答案 6 :(得分:0)

(N.B。 - 我不是Java人,因此这里的语法可能有误 - 如果是的话道歉)。

如果selUsers是一个数组,为什么不这样做:

selUsers.join(',');

这应该做你想要的。

修改

看起来我错了 - 我认为Java内置了这个功能。看起来Apache项目的功能与我的意思相同。看看这个SO答案:Java: function for arrays like PHP's join()?

答案 7 :(得分:0)

Java 1.4 +

s = s.replaceFirst("\\, \\)$", ")");

编辑:我在括号前忘记了最后一个空格

答案 8 :(得分:0)

我完全支持Stephen C的答案 - 这是我想建议的那个:只是避免添加额外的逗号。

但在您的特殊情况下,以下内容也应该有效:

s = s.replace(", \\)", ")");

它只是用单个括号", )"替换子串")"

答案 9 :(得分:0)

StringBuilder有一个非常好的append(int)重载。

String [] array = {"1","2","3" ...}; 
StringBuilder builder = new StringBuilder(); 
 builder.append(s + "( ")
for(String i : array) 
{ 
    if(builder.length() != 0) 
        builder.append(","); 
    builder.append(i); 
} 
builder.append(" )")

here

无耻地复制回答