【问题标题】:Splitting string in 2 or more regex在 2 个或更多正则表达式中拆分字符串
【发布时间】:2016-12-02 05:53:12
【问题描述】:

我正在尝试将字符串拆分为涉及, () 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。

提前致谢。

【问题讨论】:

    标签: java mysql swing jdbc


    【解决方案1】:

    使用这样的正则表达式:

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

    【讨论】:

      【解决方案2】:

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

      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
      }
      

      【讨论】:

        【解决方案3】:

        我觉得你可以把CONCAT这四列改成你提到的格式:

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

        【讨论】:

        • 感谢您的建议。我实际上已经设法将连接的字符串连接到组合框。我现在的问题是如何将连接的字符串拆分为多个部分,以便我可以将它用于 WHERE 子句。我在说明中添加了屏幕截图。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多