我想知道是否有办法做这样的事情:
Excel工作表/ 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&CN之间有空格,权利.1个单元格包含用户名,1个单元格包含权利)
最终打印应如下所示:
User: Bob Entitlement: Administrator, Domain User
User: Josh Entitlement: Domain User, Local, Temp, Full Time
User: Mary Entitlement: Administrator, Local, Temp
管理员和域用户都是我想要从单元格中取出的。现在,有多个不同的单元可能包含超过1-5种不同的CN,例如用户Josh和Mary。
简而言之,我不太确定如何操纵java字符串以仅提取管理员和域(以及以" "CN=
开头的后续权利),这些权限可以通过循环来命中每个单元格。可以在字符串中搜索以" CN ="开头的任何值的东西。然后遍历字符串以查找以" "CN=
开头的部分。
基于单元格中的信息。如果这需要重新措辞,请告诉我,因为很难在文字中描述这一点。
答案 0 :(得分:2)
您正在寻找的是indexOf功能:
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
如果您在一行上没有关于用户的信息,则必须先准备好。因为你有它在一个字符串中获取它,你可以通过这种方法搜索它。你需要获得开始和结束索引。 比你只需使用str.substring准备字符串,你将从中打印出来。 http://www.w3schools.com/jsref/jsref_substring.asp
答案 1 :(得分:1)
有多种方法可以解决这个问题。
但最天真的是通过输入循环一次并提取CN =之后的内容直到','或'\“'。
以下是代码:
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;
}
}