如何用点之前的单词替换字符串中的一个点('。')?

时间:2015-11-13 21:56:26

标签: java string replace character

如果我们有

String x="Hello.World";

我希望将'.'替换为"Hello",以便:"HelloHelloWorld"

问题是,如果我有:

String Y="Hello.beautiful.world.how.are.you;"

答案必须是"HelloHellobeautifulbeautifulworldworldhowhowareareyouyou"

请记住,我不能使用数组。

3 个答案:

答案 0 :(得分:3)

我认为您可以使用正则表达式替换来实现这一目标。在正则表达式中,您可以使用所谓的“捕获组”。您将一个单词加上一个点与正则表达式匹配,然后将其替换为匹配单词的两倍。

// Match any number of word characters plus a dot
Pattern regex = Pattern.compile("(\\w*)\\.");

Matcher regexMatcher = regex.matcher(text);

// $1 is the matched word, so $1$1 is just two times that word.
resultText = regexMatcher.replaceAll("$1$1");

请注意,我没有尝试过,因为设置Java环境等可能需要半个小时。但我相信它有效。

答案 1 :(得分:1)

将问题想象为指针问题。您需要保持一个正在运行的list(set(x) - set(y)) 指向您查找的最后一个位置(我的代码中为pointer),并指向您当前位置的指针(我的代码中为firstIndex)。对这些地点之间的任何内容进行nextIndex调用(在第一次出现后添加1到subString(),因为我们不需要捕获"。"),将其追加两次到一个新的字符串,然后更改您的指针。可能有更优雅的解决方案,但这可以完成工作:

firstIndex

输出:

    String Y="Hello.beautiful.world.how.are.you";
    int firstIndex=0;
    int nextIndex=Y.indexOf(".",firstIndex);

    String newString = "";
    while(nextIndex != -1){
        newString += Y.substring(firstIndex==0 ? firstIndex : firstIndex+1, nextIndex);
        newString += Y.substring(firstIndex==0 ? firstIndex : firstIndex+1, nextIndex);
        firstIndex=nextIndex;
        nextIndex=Y.indexOf(".", nextIndex+1);
    }

    System.out.println(newString);

答案 2 :(得分:-2)

这就是我所拥有的:

public String meowDot(String meow){
    int length = meow.length();
    String beforeDot = "";
    String afterDot;
    char character;
    for(int i=0; i < length; i++){
        character = meow.charAt(i);
        if (i < largo - 1 && character == '.'){
            beforeDot += meow.substring(0, i) + meow.substring(0, i);
            afterDot = meow.substring(i, length);
            meow = afterDot;
        } else if(i == length - 1 && character != '.'){
            afterDot += meow + meow;
        }          
    }
    return beforeDot;
}