簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM