Java замена Regex группой фиксации

Это действительно зависит от вида данных, которые Вы возвращаете. Так как DataSet является (в действительности) просто набором Объектов dataTable, можно возвратить несколько отличных наборов данных в сингл, и поэтому более управляемый, объектный.

мудрый Производительностью, Вы, более вероятно, получите неэффективность от неоптимизированных запросов, чем от "неправильного" выбора конструкции.NET. По крайней мере, это было моим опытом.

71
задан user 14 August 2009 в 13:55
поделиться

2 ответа

Как насчет:

if (regexMatcher.find()) {
    resultString = regexMatcher.replaceAll(
            String.valueOf(3 * Integer.parseInt(regexMatcher.group(1))));
}

Чтобы получить первое совпадение, используйте #find () . После этого вы можете использовать #group (1) для ссылки на это первое совпадение и заменить все совпадения на первое значение maches, умноженное на 3.

И в случае, если вы хотите заменить каждое совпадение на значение этого совпадения, умноженное на 3:

    Pattern p = Pattern.compile("(\\d{1,2})");
    Matcher m = p.matcher("12 54 1 65");
    StringBuffer s = new StringBuffer();
    while (m.find())
        m.appendReplacement(s, String.valueOf(3 * Integer.parseInt(m.group(1))));
    System.out.println(s.toString());

Вы можете просмотреть документацию Matcher , где это и многое другое подробно описано.

78
ответ дан 24 November 2019 в 13:07
поделиться

Ответ Эрла дает вам решение, но я подумал, что добавлю, в чем проблема, которая вызывает ваше IllegalStateException . Вы вызываете группу (1) без предварительного вызова операции сопоставления (например, find () ). В этом нет необходимости, если вы просто используете $ 1 , поскольку replaceAll () является операцией сопоставления.

11
ответ дан 24 November 2019 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: