【问题标题】:How to append single quotes into both side of stringBuilder object in java如何在java中将单引号附加到stringBuilder对象的两侧
【发布时间】:2015-08-08 12:39:15
【问题描述】:

我想将单引号添加到字符串数组中。如果我有 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)

【问题讨论】:

  • 这些是单独的代码块还是一个?如果是后者,那甚至不应该编译。如果是前者,你需要更好地格式化你的代码,这样它就不会那样显示。
  • 重新检查您发布的代码一次。
  • 你没有得到任何编译错误?你能发布整个代码吗?
  • 我已经更新了我的代码
  • 这是java还是javascript?您在其中有关键字function,但在Java 中没有关键字function。我也没有看到任何数组。你的问题措辞很糟糕。

标签: java string append stringbuilder


【解决方案1】:

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

import org.springframework.util.StringUtils;

String wrapWithSingleQuotes(String sampleString) {
        return StringUtils.quote(sampleString);
    }

【讨论】:

    【解决方案2】:

    Apache Commons Lang 3 中已经有 StringUtils.wrap 方法,该方法将 char/string 添加到其他字符串之前,使用 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'"});
        }
    }
    

    【讨论】:

      【解决方案3】:

      我不太确定您的代码做了什么,但我编写了一个函数,该函数将 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();
      }
      

      【讨论】:

        【解决方案4】:

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

        检查

        if(Variable_1.length()>0)
        

        deleteCharAt 之前

        【讨论】:

        • 如果长度为零,我应该什么都不返回
        猜你喜欢
        • 2017-12-10
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多