JAVA逗号分隔字符串到单引号字符串
我试图从用户那里获取值,并在SQL查询中使用这些值。 我可以在查询中附加单个值,但当我在查询中使用时,我遇到了一个问题 我从用户那里得到一个字符串:JAVA逗号分隔字符串到单引号字符串,java,regex,Java,Regex,我试图从用户那里获取值,并在SQL查询中使用这些值。 我可以在查询中附加单个值,但当我在查询中使用时,我遇到了一个问题 我从用户那里得到一个字符串:po1、po2、po3。 我想将其转换为“po1”、“po2”、“po3”,而对以前的代码所做的更改最少 我已经处理了在中添加括号的问题,但在添加单引号时遇到了问题 这是我的全部代码: public static void main(String[] args) { String poListString = "po1,po2,po3";
po1、po2、po3
。
我想将其转换为“po1”、“po2”、“po3”
,而对以前的代码所做的更改最少
我已经处理了在中添加括号的问题,但在添加单引号时遇到了问题
这是我的全部代码:
public static void main(String[] args) {
String poListString = "po1,po2,po3";
String query = "SELECT shpUID.attribute_value shipunitid, pal.container_id palletid, cas.container_id caseid, dl.delivery_line_id, dg.delivery_group_id, dlv.delivery_type_id, dl.qty, po.attribute_value po, Max(Isnull(comm.attribute_value, '')) commodity, Sum(Isnull(Cast(wgt.attribute_value AS FLOAT), 0.0)) weight, Max(Isnull(wgtuom.attribute_value, '')) weightuom, Sum(Isnull(Cast(vol.attribute_value AS FLOAT), 0.0)) volume, Max(Isnull(voluom.attribute_value, '')) volumeuom, GETDATE() EventDate FROM container pal INNER JOIN container cas ON pal.container_id = cas.parent_container_id AND pal.container_type = 'Pallet' AND cas.container_type = 'Case' INNER JOIN container_detail cdtl ON cdtl.container_id = cas.container_id INNER JOIN container_delivery cd ON cd.detail_id = cdtl.detail_id INNER JOIN delivery_line dl ON cd.delivery_line_id = dl.delivery_line_id INNER JOIN delivery_group dg ON dg.delivery_group_id = dl.delivery_group_id INNER JOIN delivery dlv ON dlv.delivery_num = dl.delivery_num INNER JOIN delivery_type dt ON dt.delivery_type_id = dlv.delivery_type_id LEFT OUTER JOIN attribute shpUID ON shpUID.attribute_id = cdtl.attribute_id AND shpUID.attribute_type = 'SHIP_UNIT_ID' LEFT OUTER JOIN attribute wgt ON wgt.attribute_id = cdtl.attribute_id AND wgt.attribute_type = 'Weight' LEFT OUTER JOIN attribute wgtuom ON wgtuom.attribute_id = cdtl.attribute_id AND wgtuom.attribute_type = 'Weightuom' LEFT OUTER JOIN attribute vol ON vol.attribute_id = cdtl.attribute_id AND vol.attribute_type = 'Volume' LEFT OUTER JOIN attribute voluom ON voluom.attribute_id = cdtl.attribute_id AND voluom.attribute_type = 'Volumeuom' LEFT OUTER JOIN attribute comm ON comm.attribute_id = cdtl.attribute_id AND comm.attribute_type = 'COMMODITY' LEFT OUTER JOIN attribute po ON po.attribute_id = cdtl.attribute_id AND po.attribute_type = 'PO' WHERE pal.container_id = @REPLACEMENT-1@ AND dlv.delivery_num IN @REPLACEMENT-IN@ AND dt.class = @REPLACEMENT-2@ GROUP BY pal.container_id, cas.container_id, dl.delivery_line_id, shpUID.attribute_value, po.attribute_value, pal.container_type, dg.delivery_group_id, dlv.delivery_type_id, dl.qty UNION SELECT shpUID.attribute_value shipunitid, pal.container_id palletid, 'UNKNOWN' caseid, dl.delivery_line_id, dg.delivery_group_id, dlv.delivery_type_id, dl.qty, po.attribute_value po, Max(Isnull(comm.attribute_value, '')) commodity, Sum(Isnull(Cast(wgt.attribute_value AS FLOAT), 0.0)) weight, Max(Isnull(wgtuom.attribute_value, '')) weightuom, Sum(Isnull(Cast(vol.attribute_value AS FLOAT), 0.0)) volume, Max(Isnull(voluom.attribute_value, '')) volumeuom, GETDATE() EventDate FROM container pal INNER JOIN container_detail cdtl ON cdtl.container_id = pal.container_id AND pal.container_type = 'Pallet' INNER JOIN container_delivery cd ON cd.detail_id = cdtl.detail_id INNER JOIN delivery_line dl ON cd.delivery_line_id = dl.delivery_line_id INNER JOIN delivery_group dg ON dg.delivery_group_id = dl.delivery_group_id INNER JOIN delivery dlv ON dlv.delivery_num = dl.delivery_num INNER JOIN delivery_type dt ON dt.delivery_type_id = dlv.delivery_type_id LEFT OUTER JOIN attribute shpUID ON shpUID.attribute_id = cdtl.attribute_id AND shpUID.attribute_type = 'SHIP_UNIT_ID' LEFT OUTER JOIN attribute wgt ON wgt.attribute_id = cdtl.attribute_id AND wgt.attribute_type = 'Weight' LEFT OUTER JOIN attribute wgtuom ON wgtuom.attribute_id = cdtl.attribute_id AND wgtuom.attribute_type = 'Weightuom' LEFT OUTER JOIN attribute vol ON vol.attribute_id = cdtl.attribute_id AND vol.attribute_type = 'Volume' LEFT OUTER JOIN attribute voluom ON voluom.attribute_id = cdtl.attribute_id AND voluom.attribute_type = 'Volumeuom' LEFT OUTER JOIN attribute comm ON comm.attribute_id = cdtl.attribute_id AND comm.attribute_type = 'COMMODITY' LEFT OUTER JOIN attribute po ON po.attribute_id = cdtl.attribute_id AND po.attribute_type = 'PO' WHERE pal.container_id = @REPLACEMENT-1@ AND dlv.delivery_num IN @REPLACEMENT-IN@ AND dt.class = @REPLACEMENT-2@ GROUP BY pal.container_id, dl.delivery_line_id, shpUID.attribute_value, po.attribute_value, pal.container_type, dg.delivery_group_id, dlv.delivery_type_id, dl.qty";
String value1 = "12345678910";
String value2 = "INBOUND";
String finalQuery = AppendQueryForIN.generateDynamicQueryForInAndValue(query, poListString, value1, value2);
System.out.println(finalQuery);
}
public static String generateDynamicQueryForInAndValue(String sqlQuery, String stringList, String value1, String value2)
{
StringBuilder listWithBrackets = new StringBuilder();
listWithBrackets = listWithBrackets.append('(').append(stringList).append(')');
String value1WithQoutes = "'"+value1+"'";
String value2WithQoutes = "'"+value2+"'";
String finalQuery = sqlQuery.replace("@REPLACEMENT-IN@", listWithBrackets);
finalQuery = finalQuery.replace("@REPLACEMENT-1@", value1WithQoutes);
finalQuery = finalQuery.replace("@REPLACEMENT-2@", value2WithQoutes);
return finalQuery;
}
尝试使用
字符串。拆分:
String poListString = "po1,po2,po3";
String[] parts = poListString.split(",");
StringBuilder output = new StringBuilder();
for (String part : parts) {
if (output.length() > 0) {
output.append(",");
}
output.append("'").append(part).append("'");
}
System.out.println(output);
输出:
'po1','po2','po3'
尝试使用字符串。拆分:
String poListString = "po1,po2,po3";
String[] parts = poListString.split(",");
StringBuilder output = new StringBuilder();
for (String part : parts) {
if (output.length() > 0) {
output.append(",");
}
output.append("'").append(part).append("'");
}
System.out.println(output);
输出:
'po1','po2','po3'
假设字符串格式不变,您可以使用regex
替换逗号以及字符串的开头和结尾
例如:
String poListString = "po1,po2,po3";
String result=poListString.replaceAll("^|$", "'").replaceAll(",", "','");
//first replaceAll, adds ' to start and end and second replace change , to ','
System.out.println(results);
输出:
'po1','po2','po3'
‘po1’、‘po2’、‘po3’
假设字符串格式不变,您可以使用regex
替换逗号以及字符串的开头和结尾
例如:
String poListString = "po1,po2,po3";
String result=poListString.replaceAll("^|$", "'").replaceAll(",", "','");
//first replaceAll, adds ' to start and end and second replace change , to ','
System.out.println(results);
输出:
'po1','po2','po3'
‘po1’、‘po2’、‘po3’
仅用于使用流
分享想法
String quoted = Pattern.compile(",").splitAsStream(poListString)
.collect(Collectors.joining("','", "'", "'"));
通过将模式
存储为类中的常量并使用静态导入:
String quoted = PATTERN.splitAsStream(poListString).collect(joining("','", "'", "'"));
仅用于使用流
分享想法
String quoted = Pattern.compile(",").splitAsStream(poListString)
.collect(Collectors.joining("','", "'", "'"));
通过将模式
存储为类中的常量并使用静态导入:
String quoted = PATTERN.splitAsStream(poListString).collect(joining("','", "'", "'"));
最好使用StringBuilder
而不是+
。同样在Java 8中也有。@marounnaroun Java在引擎盖下使用StringBuilder
来处理所有String
操作(因为字符串是不可变的)。对于长串接,性能上有很大的差异。我想说的是,在这种情况下,使用单个StringBuilder
将获胜,因为使用原始String
串联需要创建一个StringBuilder
s链。最好使用StringBuilder
而不是+
。同样在Java 8中也有。@marounnaroun Java在引擎盖下使用StringBuilder
来处理所有String
操作(因为字符串是不可变的)。对于长串接,性能上有很大的差异。我想说的是,在这种情况下,使用单个StringBuilder
将获胜,因为使用原始String
串联需要创建StringBuilder
s链。如果用户发送空的poListString,则此操作失败。虽然我可以单独处理它,但是有没有办法在代码中处理它@nafas@Siddharth我确实提到了假设输入的格式不变,但您有一个技巧:result=results.replaceAll(“,”)
如果字符串为空,将清除该字符串。(这是一个黑客,这是一个黑客,这是一个黑客)如果用户发送空的poListString,则此操作失败。虽然我可以单独处理它,但是有没有办法在代码中处理它@nafas@Siddharth我确实提到了假设输入的格式不变,但您有一个技巧:result=results.replaceAll(“,”)
如果字符串为空,将清除该字符串。(它是黑客,它是黑客,它是黑客)