在java中的String数组位置分配一个新值

时间:2012-01-02 18:04:33

标签: java arrays string

请在下面找到我的示例代码:

    String[] tempCrfFC = crfFC;                //crfFC is a String[] itself
    for(int i = 0; i < crfFC.length; i++) {
        String[] crfTok = tempCrfFC[i].split("\\s");
        if(crfTok.length == 40) {
            if(crfTok[39].split("/")[0].equals("O")) {
                Double v = Double.parseDouble(crfTok[39].split("/")[1]);
                if (v <= d && (i == 0 || prevTagged != i-1)) {
                    tempCrfFC[i].split("\\s")[39] = "A";    //<-------
                    System.out.println("val: "+tempCrfFC[i].split("\\s")[39]);
                    System.out.println("tempCrfFC: "+tempCrfFC[i]);
                    prevTagged = i;
                }
             }
        }
    }

tempCrfFC行的示例:

The  T       Th      The     null    e       he      The     null   Aaa     Aa    1       1       1       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       O       B       O       B       O       0       DT      O       O/0.892667

在标有“&lt; -----”的行上,我希望将现有值重新分配给新值“A”。但是,在打印输出时,观察结果是该指数(39)处的值保持不变。有人可以帮我解决这个问题吗?

谢谢。

6 个答案:

答案 0 :(得分:2)

那是因为你的分裂没有得到保留:

tempCrfFC[i].split("\\s")[39] = "A";    //<-------
System.out.println("val: "+tempCrfFC[i].split("\\s")[39]);

如果你看.split("\\s")返回一个数组,[39] = "A"部分将第39个元素设置为“A”。但是,生成的数组已经消失。然后再次进行拆分并打印第二次拆分生成的新数组的第39个元素。

尝试以下内容:

String[] parts = tempCrfFC[i].split("\\s");    //<-------
parts[39] = "A";
System.out.println("val: " + parts[39]);

答案 1 :(得分:1)

tempCrfFC [i] .split(“\ s”)将为您提供一个新的字符串数组。所以你的代码应该如下所示

 String[] test = tempCrfFC[i].split("\\s");
 test[39]="A"; //Assuming test array has at least 40 elements
 System.out.println(test[39]); 

答案 2 :(得分:1)

尝试

String[] tempCrfFC = crfFC;                //crfFC is a String[] itself
for(int i = 0; i < crfFC.length; i++) {
    String[] crfTok = tempCrfFC[i].split("\\s");
    if(crfTok.length == 40) {
        String[] parts = crfTok[39].split("/");
        if (parts[0].equals("O")) {
            Double v = Double.parseDouble(parts[1]);
            if (v <= d && (i == 0 || prevTagged != i-1)) {
                cfTok[39] = "A";    //<-------
                System.out.println("val: " + cfTok[39]);
                tempCrfFC[i] = join(cfTok);
                System.out.println("tempCrfFC: " + tempCrfFC[i]);
                prevTagged = i;
            }
         }
    }
}

其中join是一个将字符串从数组连接起来的方法。

答案 3 :(得分:1)

String[] tempCrfFC = crfFC;                //crfFC is a String[] itself
for(int i = 0; i < crfFC.length; i++) {
    String[] crfTok = tempCrfFC[i].split("\\s");
    if(crfTok.length == 40) {
        if(crfTok[39].split("/")[0].equals("O")) {
            Double v = Double.parseDouble(crfTok[39].split("/")[1]);
            if (v <= d && (i == 0 || prevTagged != i-1)) {
                crfTok[39] = "A";    //<-------
                System.out.println("val: "+crfTok[39]);
                System.out.println("tempCrfFC: "+crfTok);
                prevTagged = i;
                StringBuilder joined = new StringBuilder();

                // Save in original array:
                for (String s : crfTok) {
                    if (joined.length() != 0)
                        joined.append(' ');
                    joined.append(s);
                }
                tempCrfFC[i] = joined.toString();
            }
         }
    }
}

答案 4 :(得分:0)

您正在将新值分配给split()方法返回的临时数组,并且新值不会替换为原始字符串数组,

答案 5 :(得分:0)

您正在将“A”分配给String操作产生的split(..)个对象之一。但是您必须注意,对于分割结果的任何操作都不会在原始对象上更新。所以你也必须更新orignal字符串。

替换

tempCrfFC[i].split("\\s")[39] = "A"; //<-------

类似

String[] splitted = tempCrfFC[i].split("\\s");
splitted[39] = "A";
tempCrfFC[i] = "";
for (String s : splitted) {
  tempCrfFC[i] += s;
}

for循环中的部分取决于你的目标如何再次连接/连接字符串部分。