我尝试将字符串拆分为涉及,
()
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(?,?,?,?);
这是截图。
我的目标是通过拆分它们并将其提供给getFacultyId(?,?,?,?)
存储过程来获取组合框中所选内容的ID。
提前致谢。
答案 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) = ?;