请在下面找到我的示例代码:
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)处的值保持不变。有人可以帮我解决这个问题吗?
谢谢。
答案 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循环中的部分取决于你的目标如何再次连接/连接字符串部分。