在2个或更多正则表达式中拆分字符串

时间:2016-07-28 02:29:39

标签: java mysql swing jdbc

我尝试将字符串拆分为涉及, () spaces的部分。

它来自一个组合框项目。看起来像这样

组合框项目

(123456) LastName, FirstName MiddleName 

我想把它分成几部分

int employeeNumber = 123456
String lastName = LastName
String firstName = firstName
String middleName = middleName

所以我尝试了这个但却无法得到我想要的结果,因为它似乎只是用逗号分隔它。

String facultyName = adviserJcbx.getSelectedItem().toString().trim();
        String [] facultyNameSplit = facultyName.split(",");
        String facultyLastName = facultyNameSplit[0]; 
        String facultyFirstName = facultyNameSplit[1];
        //String facultyMiddleName = facultyNameSplit[2];

如果我尝试facultyName.split(",()\\s+");

,我会收到错误消息

所有这四个变量将用于CALLABLE存储过程的WHERE子句,如

SELECT id from table WHERE empNo = employeeNumber AND lName = lastName AND fName = firstName AND mName = middleName;

我希望你可以提供帮助,因为我在网上进行了研究,但无法找到任何有关拆分涉及更多角色的例子。

此外,是否有更简单的方法来获取GUI元素中的元素的ID,而无需创建像我创建的存储过程

CALL getFacultId(?,?,?,?);

这是截图。

enter image description here

我的目标是通过拆分它们并将其提供给getFacultyId(?,?,?,?)存储过程来获取组合框中所选内容的ID。

提前致谢。

3 个答案:

答案 0 :(得分:3)

使用这样的正则表达式:

\(([^)]*)\)\s*([^,]+),\s*(\S+)\s*(\S*)

示例Java代码:

String input = "(123456) LastName, FirstName MiddleName";
String regex = "\\(([^)]*)\\)\\s*([^,]+),\\s*(\\S+)\\s*(\\S*)";
Matcher m = Pattern.compile(regex).matcher(input);
if (m.matches()) {
    System.out.println("empNo = " + m.group(1));
    System.out.println("lName = " + m.group(2));
    System.out.println("fName = " + m.group(3));
    System.out.println("mName = " + m.group(4));
}

输出

empNo = 123456
lName = LastName
fName = FirstName
mName = MiddleName

答案 1 :(得分:1)

我建议您使用正则表达式而不是拆分:

Pattern facultyPattern = Pattern.compile("\((\\d+)\) (\\w+), (\\w+) (\\w+)");
Matcher facultyMatcher = facultyPattern.match(facultyString);
if (facultyMatcher.matches() {
    int id = Integer.parseInt(facultyMatcher.group(1));
    String lastName = facultyMatcher.group(2);
    String firstName = facultyMatcher.group(3);
    String middleName = facultyMatcher.group(4);
    ...
} else {
    // handle mismatch
}

答案 2 :(得分:0)

我认为您可以CONCAT将这四列列为您提到的格式:

SELECT id 
from table 
WHERE CONCAT('(', empNo, ') ', lName, ', ', fName, ' ', mName) = ?;
相关问题