用Java中的替换单替换第n次出现的单词

时间:2013-11-08 09:52:53

标签: java match

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

BufferedReader br = new BufferedReader(inr);

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

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

line2被称为“ces11111111”。目标词是11;替换词是CS219。 因此,结果行是cesCS21911CS21911。

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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");

这背后的逻辑如下:

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

希望这就是你要找的东西!

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