Java 字符串用多个分隔符分割
Java string split with multiple delimeters
在 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"
您可以使用 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 个名字(只有名字和姓氏)。请注意姓氏是如何访问的,它是数组中的最后一项。
步骤:
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];
这适用于中间 name/initial 不存在的情况。
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];
不要重新发明轮子。假设这些是格式正确的 DN,请参阅关于如何在不直接编写您自己的正则表达式的情况下进行解析的已接受答案:Parsing the CN out of a certificate DN
提取 CN
后,您可以应用建议的其他一些解析技术(使用 Java StringTokenizer
或 String.split()
方法作为这里的其他人建议如果已知它仅由空格分隔)。这假设您可以做出关于 CN
格式。
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);
}
输出
保罗
星云
在 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"
您可以使用 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 个名字(只有名字和姓氏)。请注意姓氏是如何访问的,它是数组中的最后一项。
步骤:
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];
这适用于中间 name/initial 不存在的情况。
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];
不要重新发明轮子。假设这些是格式正确的 DN,请参阅关于如何在不直接编写您自己的正则表达式的情况下进行解析的已接受答案:Parsing the CN out of a certificate DN
提取 CN
后,您可以应用建议的其他一些解析技术(使用 Java StringTokenizer
或 String.split()
方法作为这里的其他人建议如果已知它仅由空格分隔)。这假设您可以做出关于 CN
格式。
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);
}
输出
保罗
星云