Замена 3 одинаковых символов строки разными строками в Java с использованием replace () - PullRequest
0 голосов
/ 19 сентября 2018

Как я могу заменить 3 одинаковых символа строки разными строками в java, используя replace().

final String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and SYS_CD = ? and ACCT_TYPE in (?);

, например, символ ? встречается три раза в приведенной выше строке.Как заменить этот символ тремя разными строками, используя функцию replace()?

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Поскольку вы жестко кодируете переменную QUERY, я бы предложил немного изменить переменную QUERY.

Теперь идея состоит в том, чтобы заменить ? на {} номером параметра.внутри.

final String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = {0} and SYS_CD = {1} and ACCT_TYPE in ({2})";
System.out.println(MessageFormat.format(QUERY,"1","2","3,4,5"));

Это приведет к выводу как

select * from gfc.LSI_ELGBLTY where INSURANCE_ID = 1 and SYS_CD = 2 and ACCT_TYPE in (3,4,5)
0 голосов
/ 19 сентября 2018

Если вы используете JDBC, у вас уже есть возможность сделать это, как показано ниже:

    final String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and SYS_CD = ? and ACCT_TYPE in (?)";
    Connection dbConnection = DriverManager.getConnection(
            DB_CONNECTION, DB_USER,DB_PASSWORD);

    PreparedStatement preparedStatement = null;
    try {
        preparedStatement = dbConnection.prepareStatement(QUERY);
        preparedStatement.setString(1, firstValue); // setInt or what type you use
        preparedStatement.setString(2, secondValue);
        preparedStatement.setString(3, thirdValue);

        ResultSet rs = preparedStatement.executeQuery(QUERY);

        while (rs.next()) {
            // do the read ...
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

Или, если вы хотите сделать эту замену вручную, вы можете сделать это следующим образом:

    List<String> values = Arrays.asList("1", "2", "3");

    String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and SYS_CD = ? and ACCT_TYPE in (?)"; // here QUERY is not final

    for (String value : values) {
        QUERY = QUERY.replaceFirst("\\?", value);
    }

    System.out.println(QUERY);

Вывод:

select * from gfc.LSI_ELGBLTY where INSURANCE_ID = 1 and SYS_CD = 2 and ACCT_TYPE in (3)
0 голосов
/ 19 сентября 2018

Вы обязательно должны использовать PreparedStatement , если это необходимо.

Если вам потребуется выполнить замену самостоятельно, я не знаю о каких-либо встроенных возможностях.Тем не менее, это довольно просто бросить свой собственный.Вот несколько версий:

static String replaceN(String s, String del, String... rep)
{
    for(int i=0; i<rep.length; i++)
    {
        s = s.replaceFirst(del, rep[i]);
    }
    return s;
}

Или, возможно, более эффективная версия:

static String replaceN2(String s, String del, String... rep)
{
    String[] parts = s.split(del);
    StringBuilder b = new StringBuilder(parts[0]);
    for(int i=0; i<rep.length; i++)
    {
        b.append(rep[i]);
        b.append(parts[i+1]);
    }
    return b.toString();
}

Тест:

public static void main(String[] args)
{
    String q = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and SYS_CD = ? and ACCT_TYPE in (?);";
    System.out.println(replaceN(q, "\\?", "one", "two", "three"));
}

Вывод:

select * from gfc.LSI_ELGBLTY where INSURANCE_ID = one and SYS_CD = two and ACCT_TYPE in (three);
0 голосов
/ 19 сентября 2018

Если вы используете final, тогда вы можете назначить только один раз

final String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and 
SYS_CD = ? and ACCT_TYPE in (?);

Эту функцию вы можете использовать для замены символа в строке другими символами и возврата обратно измененной строки

String replaceOneWithThreeOther(String str, String firstReplace, 
              String secondReplace, String thirdReplace) {
   String result = str;
   String replace = "\\?"
   result.replaceFirst(replace, firstReplace);
   result.replaceFirst(replace, secondReplace);
   result.replaceFirst(replace, thirdReplace);

   return result; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...