0

我需要通过使用单独的 2D 中列出的搜索和替换匹配array项来搜索和替换。stringsarray

- - - - 编辑 - - - -

最终代码:

    String[][] searchLibrary;    // calls the replaces array from the LibToArray method
    searchLibrary= LibToArray();

    for(int i = 0; i <searchLibrary.length; i++){
        {
        fileContents.set(i, fileContents.get(i).replace(searchLibrary[i][0], searchLibrary[i][1]));
        }       
        }
    for (String row : fileContents) {
        System.out.println(row);        // print array to cmd
        }
4

1 回答 1

1

好的,首先:您可以定义您replace的方式(但将名称更改回 oldstr 和 newStr - 或者更好,oldStr 以保持一致性,使用大写 S。您不能以数字 2 开头的标识符。 ) 然后在外面,像这样遍历你的二维数组:

String[][] twoDimArray;
// something that sets up twoDimArray

for (String[] row : twoDimArray)
     replace (toSearchIn, row[0], row[1]);

// or, using an index:

for (int i = 0; i < twoDimArray.length; i++)
     replace (toSearchIn, twoDimArray[i][0], twoDimArray[i][1]);

我不确定这是否是您想要的,因为我从描述中不清楚。如果我很接近, twoDimArray 是一个数组数组(Java没有“纯”二维数组);具体来说,它是一个长度未知的数组,其中数组的每个元素都是一个长度为 2 的数组。所以 twoDimArray[i] 是数组的一个元素,该元素是一个长度为 2 的数组,可以使用 0 或1 索引它。

第二:您可能使用了错误的 contains()。ArrayList 和 String 都定义了 contains()。您的代码使用 ArrayList 版本。true对于 ArrayList,如果数组的任何元素与其参数匹配,它将返回。那看起来不对。如果您正在单步执行整个数组,您不想在每一步都搜索整个数组。对于 String,true如果字符串包含作为子字符串的参数,则返回。你必须这样写:

if (toSearchIn.get(i).contains(oldstr))

因为 toSearchIn.get(i) 是一个字符串。但我会忽略它,因为如果 contains() 返回false,replace() 无论如何都会留下字符串,这就是你想要的。

于 2013-08-06T16:28:23.080 回答