2015-07-10 144 views
1

CN=之後直接分割該字符串以便將第一個和最後一個名稱存儲在單獨字段中的最佳方法如下所示?用多個分隔符分割Java字符串

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" 

回答

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個名字(僅第一個和最後一個)。注意如何訪問姓氏,它是數組中的最後一個項目。

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]; 

這將對於其中的中間名/初始不存在,以及案件的工作。

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]; 
3

不要重新發明車輪。假設這些都能很好地形成的DN,看到在這個問題上對如何在不直接寫自己的正則表達式解析接受的答案:Parsing the CN out of a certificate DN

一旦您已經提取CN,那麼你可以申請一些其他的分析技術建議(使用Java StringTokenizerString.split()方法,正如其他人在這裏所建議的,如果它已知只能被空格分開)。這假設您可以對CN格式做出假設(例如,結果數組中的第一個元素是firstName,最後一個元素是lastName,其間的所有內容都是中間名/首字母)。

+0

很好的回答。如果語言具有可用的解析器,請使用該解析器。除非你有DN規範,否則讓其他人處理這些醜陋的細節。 – tucuxi

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