Как я могу заменить 3 одинаковых символа строки на разные строки в java с помощью replace().
final String QUERY = "select * from gfc.LSI_ELGBLTY where INSURANCE_ID = ? and SYS_CD = ? and ACCT_TYPE in (?);
например, символ ? встречается в приведенной выше строке три раза. Как я могу заменить этот символ тремя разными строками с помощью функции replace()?




Если вы используете 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;
}
Если вы используете 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)
Вы обязательно должны изучить возможность использования Подготовленное заявление, если это необходимо.
Если вам потребуется произвести замену самостоятельно, мне неизвестны какие-либо встроенные возможности. Тем не менее, довольно просто свернуть свой собственный. Вот пара версий:
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);
Поскольку вы жестко кодируете переменную 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)
Вы используете JDBC? тогда вы можете использовать PreparedStatement. Затем вы можете установить значение ваших параметров.