在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"
答案 0 :(得分:3)
不要重新发明轮子。假设这些是格式正确的DN,请参阅此问题的接受答案,了解如何解析而不直接编写自己的正则表达式:Parsing the CN out of a certificate DN
一旦您提取了CN
,那么您可以应用一些其他建议的解析技术(使用Java StringTokenizer
或String.split()
方法,正如其他人建议的那样如果已知它只用空格分开)。这假设您可以做出假设(例如,结果数组中的第一个元素是firstName
,最后一个元素是lastName
,其间的所有内容都是中间名/首字母)关于{{1格式。
答案 1 :(得分:1)
您可以使用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个名字(仅限第一个和最后一个)。请注意如何访问姓氏,它是数组中的最后一项。
答案 2 :(得分:1)
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);
}
输出
保
Sebula
答案 3 :(得分:0)
分步骤:
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];
这适用于中间名称/首字母也不存在的情况。
答案 4 :(得分:0)
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];