繁体   English   中英

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

[英]Splitting string in 2 or more regex

我想一个字符串分割成其中的部分, () 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+");类的方法, facultyName.split(",()\\\\s+");出现错误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(?,?,?,?);

这是屏幕截图。

在此处输入图片说明

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

提前致谢。

使用这样的正则表达式:

\(([^)]*)\)\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

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

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
}

我想你可以CONCAT这四列到你所提到的格式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM