如何用三个斜线替换另一个单词后替换单词?

时间:2016-03-27 22:54:06

标签: java regex string substring indexof

我有一个字符串,我需要用另一个单词替换一个单词。这是我的clientId字符串/qw/ty/s11/dc3/124,我有另一个字符id作为p13。我想将s11字符串中的clientId替换为p13

clientId的格式总是完全相同。这意味着总共有三个slah /,之后我需要用另一个单词替换该单词,所以在三个斜杠之后的任何单词,我需要用id的值替换它。

String clientId = "/qw/ty/s11/dc3/124";
String id = "p13";
String newId = ""; // this should come as /qw/ty/p13/dc3/124

这样做的简单方法是什么?

5 个答案:

答案 0 :(得分:2)

你绝对可以在正则表达式的帮助下改变字符串的任何部分。

尝试:

String content = "/qw/ty/xx/dc3/124";
String replacement = "replacement";

Pattern regex = Pattern.compile("((?:/[^/]+){2}/)([^/]*)(\\S*)", Pattern.MULTILINE);

Matcher matcher = regex.matcher(content);
if(matcher.find()){
    String result = matcher.replaceFirst("$1" + replacement + "$3");
    System.out.println(result);
}

根据输入字符串和替换值,它将发出:

/qw/ty/replacement/dc3/124 

答案 1 :(得分:1)

您可以使用indexOf方法搜索第二个斜杠。你必须这样做3次。返回的3个位置将是您想要的位置。既然你说这个职位永远不会改变,那将是一个如何做到这一点的情景。另一种方法是使用split方法拆分字符串。然后你必须迭代它并仅替换第三个单词。对于每次迭代,您还必须使用StringBuilder连接String以获取路径。这两种方法不使用REGEX值。第三种选择就像有人建议的那样,使用REGEX。

答案 2 :(得分:0)

我解决这个问题的方法是循环遍历第一个字符串,直到找到3个斜杠,然后设置一个名为&#34的变量;开始"到第三个斜线的索引。接下来,我从开始循环直到找到另一个斜杠,并设置一个名为" end"的变量。到索引。之后,我使用字符串替换方法将start + 1中的子字符串替换为新id。这是代码:

String clientId = "/qw/ty/s11/dc3/124";
    String id = "p13";
    String newId = "";
    String temporaryID = clientId;
    int slashCounter = 0;
    int start = -1; //Will throw index exception if clientId format is wrong
    int end = -1; //Will throw index exception if clientId format is wrong
    for(int i = 0; i < temporaryID.length(); i++){
        if(temporaryID.charAt(i)=='/') slashCounter++;
        if(slashCounter==3){
            start = i;
            break;
        }
    }
    for(int i = start + 1; i < temporaryID.length(); i++){
        if(temporaryID.charAt(i)=='/') end = i;
        if(end!=-1) break;
    }
    newId = temporaryID.replace(temporaryID.substring(start+1, end), id);
    System.out.println(newId);

答案 3 :(得分:0)

如果您需要替换第3和第4斜杠之间的单词

,请尝试此操作
        int counter = 0;
        int start=0;
        int end = clientId.length()-1;
        for (int i = 0; i < clientId.length(); i++) {
            if (clientId.charAt(i) == '/') {
                counter++;
                if (counter == 3) {
                    start = i+1; // find the index of the char after the 3rd slash
                } else if (counter == 4) {
                    end = i; // find the index of the 4th slash
                    break;
                }
            }
        }
        String newId = clientId.substring(0, start) + id + clientId.substring(end);

或者如果您想在第3个斜杠之后替换所有内容:

String newId = clientId.substring(0, start) + id; 

答案 4 :(得分:0)

您可以尝试使用此正则表达式查找第三个和第四个斜杠之间的字符串,这是您的ID并执行替换。

正则表达式: (\/.*?\/.*?\/).*?\/

<强> Regex101 Demo