2016-07-26 3 views
0

같은 것을 할 수있는 방법이 있는지 궁금 :문자열 조작,

는 시트/csv 파일이 보이는 데이터를 포함하는 단일 세포가 엑셀을 같은 -

User: Bob - String x = "CN=Administrators,CN=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Domain Users,OU=xxx,DC=xxx,DC=xxx,DC=xxx"

User: Josh - String y = ["CN=Domain Users,CN=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Local,OU=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Temp,CN=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Full Time,CN=xxx,DC=xxx,DC=xxx,DC=xxx"

User: Mary - String z = "CN=Administrators,CN=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Local,OU=xxx,DC=xxx,DC=xxx,DC=xxx" "CN=Temp,OU=xxx,DC=xxx,DC=xxx,DC=xxx"

(CN 사이에는 공백이 있습니다.

User: Bob Entitlement: Administrator, Domain User User: Josh Entitlement: Domain User, Local, Temp, Full Time User: Mary Entitlement: Administrator, Local, Temp

관리자 및 도메인 사용자 나 셀의 철수 원하는 것을 모두 : 1 셀은 사용자의 이름을 포함, 1 셀은

최종 인쇄는 같아야합니다) 인 타이틀먼트가 포함되어 있습니다. 이제 1-5 개의 다른 CN을 포함 할 수있는 여러 개의 셀이 있습니다 (예 : 사용자 Josh와 Mary).

간단히 말해서, 나는 관리자와 도메인 (그리고 " "CN=으로 시작하는 후속 인 타이틀먼트)을 꺼내기 위해 자바 문자열을 조작하는 방법을 각 셀에 맞추기 위해 반복 할 수 없다. 문자열에서 "CN ="으로 시작하는 값을 검색 한 다음 문자열을 반복하여 " "CN=으로 시작하는 부분을 찾습니다.

셀의 정보를 기반으로합니다. 이 텍스트를 묘사하기가 어려우므로이를 요 구하는 것이 필요한지 알려주십시오. 여기

String str = "Here there everywhere"; 

int a = str.indexOf("there"); // a is 5 
int b = str.indexOf("er");  // b is 1 
int c = str.indexOf("eR");  // c is -1, "eR" is not found 

더 예 : http://codingbat.com/doc/java-string-indexof-parsing.html

당신은 당신이 먼저 준비해야 한 줄에 사용자에 대한 정보가없는 경우 당신이 찾고있는 무엇

+0

:

그러나 가장 순진한 사람이 한 번에 입력을 통해 루프하고 ','또는 '\ "'까지 = CN 후 무엇을 추출 여기

코드입니다 문자열 목록이 있고 Entitlement에서 Administrator 또는 Domain이있는 항목을 찾아야한다는 것을 이해했는지 확인하십시오. –

+0

무엇을 달성하고 싶습니까? 도메인이나 관리자가 있습니다. 글쓰기가 매우 모호합니다. xxx의 모든 것 대신에 좋은 예를 넣으십시오. –

+0

Se 당신은 그냥 줄에 "CN = Administrator"가 포함되어 있는지 확인할 수있는 것처럼 ems, 그렇다면 출력 줄에 "관리자"를 추가하십시오."CN = DomainUsers"가 포함되어 있으면 "Domain Users"를 출력 라인에 추가하십시오 (추가 된 첫 번째 것이 아닌 경우 쉼표가 붙습니다). – FredK

답변

2

은 같이 IndexOf 기능입니다. 당신이 그것을 하나의 문자열로 얻었으므로이 방법으로 검색 할 수 있습니다. 시작 색인과 종료 색인이 필요합니다. str.substring을 사용하여 인쇄물을 만들 문자열을 준비하기 만하면됩니다. http://www.w3schools.com/jsref/jsref_substring.asp

방법의 다음 인덱스를 얻는 방법 은 여기에 있습니다 : How to return the next indexOf after a previous?

1

그 접근하는 여러 가지 방법이 있습니다. .

public class Test { 

    public static void main(String[] args) { 
     String user1 = "User: Bob - String x = \"CN=Administrators,CN=xxx,DC=xxx,DC=xxx,CN=AHmed\" \"CN=Domain Users,OU=xxx,DC=xxx,DC=xxx,DC=xxx\""; 
     String user2 = "User: Josh - String y = [\"CN=Domain Users,CN=xxx,DC=xxx,DC=xxx,DC=xxx\" \"CN=Local,OU=xxx,DC=xxx,DC=xxx,DC=xxx\" \"CN=Temp,CN=xxx,DC=xxx,DC=xxx,DC=xxx\" \"CN=Full Time,CN=xxx,DC=xxx,DC=xxx,DC=xxx\""; 
     String user3 = "User: Mary - String z = \"CN=Administrators,CN=xxx,DC=xxx,DC=xxx,DC=xxx\" \"CN=Local,OU=xxx,DC=xxx,DC=xxx,DC=xxx\" \"CN=Temp,OU=xxx,DC=xxx,DC=xxx,DC=xxx\""; 
     System.out.println(user1.split("-")[0]+"Entitlement "+getCNs(user1)); 
     //Outputs User: Bob Entitlement [Administrators, xxx, AHmed, Domain Users] 
     System.out.println(user2.split("-")[0]+"Entitlement "+getCNs(user2)); 
     //Outputs User: Josh Entitlement [Domain Users, xxx, Local, Temp, xxx, Full Time, xxx] 
     System.out.println(user3.split("-")[0]+"Entitlement "+getCNs(user3)); 
     //Outputs User: Mary Entitlement [Administrators, xxx, Local, Temp] 
    } 

    public static ArrayList<String> getCNs(String s) { 
     char[] arr = s.toCharArray(); 
     ArrayList<String> list = new ArrayList<>(); 
     String temp = ""; 
     for (int i = 2; i < arr.length ; i++) { 
      if(arr[i]=='=' && arr[i-1]=='N' && arr[i-2]=='C'){ 
       //we found CN= 
       i++; 
       while(i<s.length()){ 
        temp+=arr[i]; 
        i++; 
        if(arr[i]==',' ||arr[i]=='\"'){ 
         list.add(temp); 
         temp = ""; 
         break; 
        } 
       } 

      } 
     } 
     return list; 
    } 
}