назначить новое значение в позиции массива String в Java - PullRequest
1 голос
/ 02 января 2012

Пожалуйста, найдите мой пример кода ниже:

    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

В строке, отмеченной «<-----», я хочупереназначить существующее значение на новое значение «A».Тем не менее, при выводе на печать, наблюдение заключается в том, что значение этого индекса (39) остается неизменным.Может ли кто-нибудь помочь мне решить эту проблему? </p>

Спасибо.

Ответы [ 6 ]

2 голосов
/ 02 января 2012

Это потому, что ваше разбиение не сохраняется:

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

Если вы посмотрите на это .split("\\s") возвращает массив, а [39] = "A" part устанавливает 39-й элемент в "A".Но сгенерированный массив исчез.А затем вы снова выполняете разбиение и печатаете 39-й элемент нового массива , сгенерированного вторым разбиением.

Попробуйте что-то вроде следующего:

1 голос
/ 02 января 2012
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();
            }
         }
    }
}
1 голос
/ 02 января 2012

Попробуйте

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 - это метод, который присоединяет вашу строку обратно из массива.

1 голос
/ 02 января 2012

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]); 
0 голосов
/ 02 января 2012

Вы присваиваете «А» одному из String объектов, которые являются результатом операции split(..).Но вы должны заметить, что любые операции с результатом split не обновляются для оригинального объекта.Поэтому вам также необходимо обновить строку оригинала.

Замените строку

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 зависит отцель, как соединить / снова соединить части строки.

0 голосов
/ 02 января 2012

вы присваиваете новое значение временному массиву, возвращенному методом split (), и это новое значение не заменяется в исходном строковом массиве ,,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...