String Manipulation,从同一行拉出某些值

时间:2016-07-26 21:25:55

标签: java string excel csv

我想知道是否有办法做这样的事情:

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=开头的部分。

基于单元格中的信息。如果这需要重新措辞,请告诉我,因为很难在文字中描述这一点。

2 个答案:

答案 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

如何获取下一个索引:How to return the next indexOf after a previous?

答案 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;
    }
}