[英]How to convert comma separated and double quoted words string to list/array of strings in Java
[英]JAVA Comma separated string to single quoted string
我試圖從用戶那里獲取值,並在我的SQL查詢中使用這些值。 我可以在查詢中附加單個值,但是當我在查詢中使用IN時,我遇到了問題。
我從用戶那里得到一個字符串: po1,po2,po3
。 我想將其轉換為'po1','po2','po3'
,而對先前代碼的更改最少。
我已經為IN添加括號,但是在添加單引號時遇到了問題。
這是我的整個代碼:
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.split
:
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
可以使用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'
僅用於使用Stream
分享想法。
String quoted = Pattern.compile(",").splitAsStream(poListString)
.collect(Collectors.joining("','", "'", "'"));
通過將Pattern
作為常量存儲在類中並使用靜態導入:
String quoted = PATTERN.splitAsStream(poListString).collect(joining("','", "'", "'"));
public static String generateDynamicQueryForInAndValue(String sqlQuery, String stringList, String value1, String value2)
{
StringBuilder listWithBrackets = new StringBuilder();
if(stringList == null || stringList.isEmpty()){
stringList = "''";
}else{
stringList=stringList.replaceAll("^|$", "'").replaceAll(",", "','");
}
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.