Замена 3 одинаковых символов строки на разные строки в java с помощью replace ()

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

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

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

Вы используете JDBC? тогда вы можете использовать PreparedStatement. Затем вы можете установить значение ваших параметров.

Raj 19.09.2018 07:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
117
4

Ответы 4

Если вы используете 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)

Другие вопросы по теме