从Java中的字符串中提取特定但未知的值

时间:2011-04-08 06:57:08

标签: java mysql string substring

我正在尝试从Java中的MySQL插入命令中提取值。就Java而言,insert命令只是一个字符串。它的格式为

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

我需要从该声明中删除'45'。我无法确定其索引,因为名称和职位名称会有所不同。我只需要年龄。除了过于复杂的字符串操作,我可能会及时发现,是否有更直接的方法来隔离这些字符?我似乎无法理解如何去做,我对正则表达式不是很熟悉。

5 个答案:

答案 0 :(得分:2)

如果这是您的邮件的特定格式,那么这样的正则表达式应该会有所帮助:

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

读取结果的第一组,你应该得到年龄。

在正则表达式(X)中定义一个匹配组,用于捕获X(其中X可以是任何正则表达式)。这意味着如果整个正则表达式匹配,那么您可以轻松找到此匹配组中的值(在Java中使用Matcher.group())。

您还可以在单​​个正则表达式中拥有多个匹配组,如下所示:

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 ...
}

答案 1 :(得分:0)

假设该名称不包含任何“您可以使用正则表达式.*?".*?".*?"(\d+)".*而组(1)为您提供年龄。

答案 2 :(得分:0)

据我所知,你的insert命令只会插入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);

答案 3 :(得分:0)

String.split如何用“,”?

final String insert = "INSERT INTO employees VALUES (\"John Doe\", \"45\", \"engineer\"); ";
System.out.println(insert.split(",")[1].trim());

答案 4 :(得分:0)

如果您确定字符串中只有一个数字实例,那么您需要的正则表达式非常简单:

//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());