2016-03-27 58 views
1

我有一个字符串,我需要用另一个字替换一个字。这是我的字符串clientId作为/qw/ty/s11/dc3/124,我有另一个字符串id作为p13。我想用p13代替clientId字符串中的s11如何用另一个单词替换三个斜杠后的单词?

格式clientId总是一模一样。这意味着将有三个slah /总是在此之后,我需要用另一个单词替换该单词,所以任何单词后三个斜线,我需要用值id替换它。

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

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

+0

我建议使用['正常Expressions'](https://docs.oracle.com/javase/tutorial/essential/regex/)。 –

+0

你能提供一个例子吗?我如何在这里使用'regex'? – john

+0

clientId总是在第三个斜杠之后? – 2016-03-28 00:21:40

回答

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 
+0

如何更改正则表达式它适用于像content =“/ qw/ty // dc3/124”这样的字符串? – Yev

+0

@Yev很好的问题和感谢启发。我没有想过这种可能性,但很容易适应它。只需用'([^ /] *)替换'([^ /] +)''然后就可以了。 – Saleem

+0

谢谢,正则表达式似乎是每个程序员必须处理的东西:) – Yev

1

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

+0

你能提供一个例子吗?我如何在这里使用'indexOf'? – john

+0

在我看来,使用'indexOf'在这里并不适合。 'indexOf'返回指定字符第一次出现的字符串中的索引(并且在内部使用for循环来获取它)。如果第三斜线的位置永远不变,你总是知道位置(在这个例子中是6)。否则,使用3次indexOf可能看起来像'clientId.indexOf('/',clientId.indexOf('/',clientId.indexOf('/')+ 1)+1)' – Yev

0

我这样做的方式是通过循环第一个字符串,直到找到3个斜杠,并将第三个斜杠的索引设置为“start”变量。接下来,我从开始循环直到找到另一个斜线,并将一个名为“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); 
0

试试这个,如果你需要更换第三和第四斜线之间的字

 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; 
0

你可以试试这个正则表达式来寻找第三和第四斜线之间的字符串,它是你的ID和做替换。

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

Regex101 Demo

+0

@david:Saleem发布了Java代码,因此我不会重复它。我希望你能使它工作。 – 2016-03-28 00:40:24

相关问题