簡體   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