如何在java中为stringBuilder对象的两边附加单引号



我想在字符串数组中添加单引号。如果I有5个值(1,2,3,4,5)。我需要像这样的'1','2','3','4','5'

我已经尝试了下面的一些,但我得到错误

public class Main()
{
        StringBuilder values=new StringBuilder();           
            values=getValues(1);
            System.out.println(values.toString());
            public StringBuilder getValues(int productid){
                    StringBuilder Variable_1=new StringBuilder();       
                    Variable_1=get(productid);                  
                    return Variable_1.deleteCharAt(Variable_1.length()-1);
                }
    public static StringBuilder get(String product)
    {
    /Some quoatoes to retrive value from db/
    while (rs.next()) {
                    number = rs.getString("org");
                    orgNames.append("'");
                    orgNames.append(number);
                    orgNames.append("'");
                    orgNames.append(",");
                }
    return orgNames;
    }
}  

我得到如下异常

  java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:766)
        at java.lang.StringBuilder.deleteCharAt(StringBuilder.java:280)
        at calc.getValues(process.java:8)

在最后一次迭代中Variable_1.length()-1返回索引超出边界,因为Variable_1.length()为零

检查

if(Variable_1.length()>0)
之前deleteCharAt

我不太确定你的代码做了什么,但我已经写了一个函数,将采取Strings数组作为输入,并以引号包围每个元素。

String[] appendQuotes(String[] array)
{
    List<String> result = new ArrayList<>();
    for(String str : array)
    {
        StringBuilder sb = new StringBuilder();
        sb.append("'");
        sb.append(str);
        sb.append("'");
        result.add(sb.toString());
    }
    return result.toArray();
}

已经有StringUtils了。Apache Commons Lang 3中的wrap方法,将字符/字符串添加到其他字符串中,使用Java8特性的示例代码如下所示:

import org.apache.commons.lang3.StringUtils;
import org.assertj.core.api.Assertions;
import org.testng.annotations.*;
import java.util.stream.Stream;
public class StringArrayWrapTest {
    public static final String SINGLE_QUOTE_SIGN = "'";
    @Test
    public void stringArrayWrapTest() {
        //given
        String[] arrayOfStrings = {"1", "2", "3", "4", "5"};
        //when
        String[] arrayOfStringsWithQuotes = (String[]) Stream.of(arrayOfStrings)
                .map((stringFromArray -> StringUtils.wrap(stringFromArray, SINGLE_QUOTE_SIGN)))
                .toArray(size -> new String[size]);
        //then
        Assertions.assertThat(arrayOfStringsWithQuotes)
                .containsExactly(new String[]{"'1'", "'2'", "'3'", "'4'", "'5'"});
    }
}

同样的事情可以通过Spring Framework完成:

import org.springframework.util.StringUtils;
String wrapWithSingleQuotes(String sampleString) {
        return StringUtils.quote(sampleString);
    }

最新更新