[英]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.