извлечение определенных, но неизвестных значений из строки в Java - PullRequest
0 голосов
/ 08 апреля 2011

Я пытаюсь извлечь значения из команды вставки MySQL в Java.Команда вставки - это просто строка для Java.он будет иметь формат

INSERT INTO employees VALUES ("John Doe", "45", "engineer");

Мне нужно вывести 45 из этого утверждения.Я не могу точно определить его индекс, потому что имена и должности будут разными.Мне нужен только возраст.Помимо чрезмерно сложных манипуляций со строками, которые я, вероятно, мог бы со временем выяснить, есть ли более простой способ изолировать эти символы?Кажется, я просто не могу понять, как это сделать, и я не очень знаком с регулярными выражениями.

Ответы [ 5 ]

2 голосов
/ 08 апреля 2011

Если это специфический формат вашего сообщения, то такое выражение должно помочь:

INSERT INTO employees VALUES (".*?", "(.*?)", ".*?");

Прочитайте первую группу результата, и вы должны получить возраст.

В регулярных выражениях (X) определяет соответствующую группу, которая захватывает X (где X может быть любым регулярным выражением). Это означает, что , если совпадает со всем регулярным выражением, вы можете легко найти значение в этой соответствующей группе (используя Matcher.group() в Java).

Вы также можете иметь несколько подходящих групп в одном регулярном выражении, например:

INSERT INTO employees VALUES ("(.*?)", "(.*?)", "(.*?)");

Итак, ваш код может выглядеть так:

String sql = "INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\");";
final Pattern patter = Pattern.compile("INSERT INTO employees VALUES (\"(.*?)\", \"(.*?)\", \"(.*?)\");");
final Matcher matcher = pattern.matcher(sql);
if (matcher.matches()) {
  String name = matcher.group(1);
  String age = matcher.group(2);
  String job = matcher.group(3);
  // do stuff ...
}
0 голосов
/ 08 апреля 2011

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

//Assuming that str contains your insert statement
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(str);
if(m.find()) System.out.println(m.group());
0 голосов
/ 08 апреля 2011

Как насчет String.split на ","?

final String insert = "INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\"); ";
System.out.println(insert.split(",")[1].trim());
0 голосов
/ 08 апреля 2011

Насколько я понимаю, ваша команда вставки будет вставлена ​​только в 3 столбца.Что вы, вероятно, можете сделать, разделить строку на запятую символа (,), а затем получить второй элемент массива, обрезать пробелы слева и справа, а затем извлечь его элементы, кроме первого и последнего символа.Это должно принести вам возраст.Написание псевдокода для него:

String insertQuery="INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\")";
String splitQuery=insertQuery.split(",");
String age=splitQuery[1];
age=age.trim();
age=age.substring(1, age.length-2);
0 голосов
/ 08 апреля 2011

при условии, что имя не содержит "вы можете использовать регулярное выражение .*?".*?".*?"(\d+)".*, а группа (1) дает вам возраст.

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