【问题标题】:Java string split with multiple delimeters使用多个分隔符拆分 Java 字符串
【发布时间】:2015-07-10 15:20:19
【问题描述】:

如下所示,在 CN= 之后直接拆分此字符串以将名字和姓氏存储在单独的字段中的最佳方法是什么?

String distinguisedName = "CN=Paul M. Sebula,OU=BBB,OU=Users,OU=TIES Project,DC=SPHQTest,DC=na,DC=BBBBBB,DC=com"
String firstName"Paul"
String lastName="Sebula"

【问题讨论】:

    标签: java regex split delimiter


    【解决方案1】:

    不要重新发明轮子。假设这些是格式良好的 DN,请参阅此问题的公认答案,了解如何在不直接编写自己的正则表达式的情况下进行解析:Parsing the CN out of a certificate DN

    一旦您提取了CN,那么您可以应用一些其他建议的解析技术(使用Java StringTokenizerString.split() 方法,正如其他人建议的那样,如果已知它仅由空格)。这假设您可以对CN 格式做出假设(例如,结果数组中的第一个元素是firstName,最后一个元素是lastName,中间的所有元素都是中间名/首字母)。

    【讨论】:

    • 好答案。如果一种语言有可用的解析器,请使用该解析器。除非您手头有 DN 规范,否则请让其他人处理丑陋的细节。
    【解决方案2】:

    你可以使用split:

    String distinguisedName = "CN=Paul Sebula,OU=BAE,OU=Users,OU=TIES Project,DC=SPHQTest,DC=na,DC=baesystems,DC=com";
    String[] names = distinguisedName.split(",")[0].split("=")[1].split(" ");
    String firstName = names[0]; 
    String lastName= names.length > 2 ? names[names.length-1] : names[1];
    System.out.println(firstName + " " + lastName);
    

    IDEONE demo,输出:Paul Sebula

    这也仅占 2 个名称(仅名字和姓氏)。请注意姓氏是如何访问的,它是数组中的最后一项。

    【讨论】:

      【解决方案3】:
      public static void main(String[] args) {
      
          String distinguisedName = "CN=Paul M. Sebula,OU=BBB,OU=Users,OU=TIES Project,DC=SPHQTest,DC=na,DC=BBBBBB,DC=com";
          String splitResult[]=distinguisedName.split(",")[0].split("=");
          String resultTwo[]=splitResult[1].split("\\.");
          String firstName=resultTwo[0].split(" ")[0].trim();
          String lastName=resultTwo[1].trim();
          System.out.println(firstName);
          System.out.println(lastName);
      
      }
      

      输出

      保罗

      塞布拉

      【讨论】:

        【解决方案4】:
        String distinguisedName = "CN=Paul M. Sebula,OU=BBB,OU=Users,OU=TIES Project,DC=SPHQTest,DC=na,DC=BBBBBB,DC=com"
        
        String[] commaSplit = distinguisedName.split(',');
        String[] whitespaceSplit = commaSplit[0].split(' ');
        String firstName = whitespaceSplit[0].substring(3);
        String lastName = whiteSpaceSplit[2];
        

        【讨论】:

          【解决方案5】:

          分步:

          String distinguisedName = "CN=Paul M. Sebula,OU=BBB,OU=Users,OU=TIES Project,DC=SPHQTest,DC=na,DC=BBBBBB,DC=com";
          String fullName = distinguisedName.substring(3, distinguisedName.indexOf(','));
          String[] nameParts = fullName.split(" ");
          String firstName = nameParts[0];
          String lastName = nameParts[nameParts.length-1];
          

          这也适用于中间名/首字母不存在的情况。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-09-04
            • 2012-10-24
            • 1970-01-01
            • 1970-01-01
            • 2018-02-27
            • 2012-02-27
            • 1970-01-01
            相关资源
            最近更新 更多