JAVA逗号分隔字符串到单引号字符串

JAVA逗号分隔字符串到单引号字符串,java,regex,Java,Regex,我试图从用户那里获取值,并在SQL查询中使用这些值。 我可以在查询中附加单个值,但当我在查询中使用时,我遇到了一个问题 我从用户那里得到一个字符串:po1、po2、po3。 我想将其转换为“po1”、“po2”、“po3”,而对以前的代码所做的更改最少 我已经处理了在中添加括号的问题,但在添加单引号时遇到了问题 这是我的全部代码: public static void main(String[] args) { String poListString = "po1,po2,po3";

我试图从用户那里获取值,并在SQL查询中使用这些值。 我可以在查询中附加单个值,但当我在查询中使用时,我遇到了一个问题

我从用户那里得到一个字符串:
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(“,”)
如果字符串为空,将清除该字符串。(它是黑客,它是黑客,它是黑客)