如何在 java 中将单引号附加到 stringBuilder 对象的两侧
How to append single quotes into both side of stringBuilder object in java
我想将单引号添加到字符串数组中。如果我有 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)
我不太确定你的代码做了什么,但我写了一个函数,它将 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();
}
在最后一次迭代中 Variable_1.length()-1 returns 索引越界因为
Variable_1.length() 为零。
勾选
if(Variable_1.length()>0)
在 deleteCharAt 之前
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'"});
}
}
同样的事情可以通过 Spring 框架完成:
import org.springframework.util.StringUtils;
String wrapWithSingleQuotes(String sampleString) {
return StringUtils.quote(sampleString);
}
我想将单引号添加到字符串数组中。如果我有 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)
我不太确定你的代码做了什么,但我写了一个函数,它将 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();
}
在最后一次迭代中 Variable_1.length()-1 returns 索引越界因为 Variable_1.length() 为零。
勾选
if(Variable_1.length()>0)
在 deleteCharAt 之前
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'"});
}
}
同样的事情可以通过 Spring 框架完成:
import org.springframework.util.StringUtils;
String wrapWithSingleQuotes(String sampleString) {
return StringUtils.quote(sampleString);
}