Это действительно зависит от вида данных, которые Вы возвращаете. Так как DataSet является (в действительности) просто набором Объектов dataTable, можно возвратить несколько отличных наборов данных в сингл, и поэтому более управляемый, объектный.
мудрый Производительностью, Вы, более вероятно, получите неэффективность от неоптимизированных запросов, чем от "неправильного" выбора конструкции.NET. По крайней мере, это было моим опытом.
Как насчет:
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
, где это и многое другое подробно описано.
Ответ Эрла дает вам решение, но я подумал, что добавлю, в чем проблема, которая вызывает ваше IllegalStateException
. Вы вызываете группу (1)
без предварительного вызова операции сопоставления (например, find ()
). В этом нет необходимости, если вы просто используете $ 1
, поскольку replaceAll ()
является операцией сопоставления.