0

我正在做与 Java 语言相关的作业。我正在通过套接字从网站读取文本文件:

BufferedReader br = new BufferedReader(inr);

while((line2 = br.readLine()) != null)
{...}

仅当 n 为奇数时,我才需要用替换词替换目标词的第 n 次出现。例如:

第 2 行读作“ces11111111”。目标词是 11 ;替换词是 CS219。因此,结果行是 cesCS21911CS21911。

我怎样才能做到这一点?请帮我完成我的作业。

4

2 回答 2

0

这是我的代码:

public static String replaceIfOdd(String stringToChange,
        String searchingWord, String replacingWord) {
    final String separator = "#######";
    String splittingString = stringToChange.replaceAll(searchingWord,
            separator + searchingWord);
    String[] splitArray = splittingString.split(separator);
    String result = "";
    for (int i = 0; i < splitArray.length; i++) {
        if (i % 2 == 1)
            splitArray[i] = splitArray[i].replace(searchingWord,
                    replacingWord);
        result += splitArray[i];
    }
    System.out.println(result);
    return result;
}

称呼它的方式:

replaceIfOdd("ces11111111", "11", "CS219");

这背后的逻辑如下:

我将所有出现的 替换searchingWordseparator + searchingWord。之后,我只是使用该split函数拆分结果字符串。然后我循环遍历数组的所有元素,只有当searchingWord出现在数组中的奇数位置时才进行正确的替换,同时,我只是重新创建字符串并完成正确的替换。

希望这就是您要寻找的东西!

PS:我使用一个字符串separator来分解stringToChange,显然如果你stringToChange有这样一个字符串,该方法不会给你正确的结果......如果你担心,我会尝试考虑不同的实现它。再见!

于 2013-11-08T10:43:37.707 回答
0
    String in = "ces11ccc11ceb11";
    in = "ces11111111";
    String target = "11";
    String replacement = "CS219";
    int j=0;
    boolean flag=true;
    String result = "";

    for(int i=0;i<in.length();i++)
    {

        if(in.length()-i<target.length()) break;
        if(in.charAt(i)==target.charAt(0))
        {
            if(in.substring(i, i+target.length()).equals(target))
            {
                if(flag)
                {   
                    result += replacement;
                }
                else result += target;
                flag=!flag; 
                i = i+target.length()-1;
            }
            else result += in.charAt(i);

        }
        else
        {
            result += in.charAt(i);
        }

    }

    System.out.println(result);
于 2013-11-08T10:01:19.470 回答