2017-03-07 64 views
0

我有一个非常长的java字符串,我试图用反向替换特定单词的一半出现次数。所以,如果字符串是“你好我的朋友你好”,输出如果我运行它与单词“你好”应该给一些像“你好我的朋友olleh”。正则表达式replaceAll具有替换概率

我知道我可以扭转一个字与

new StringBuilder(str).reverse().toString() 

,我也可以用

Str.replaceAll("hello", "olleh") 

修改字符串。但是,我怎么能告诉replaceAll只替换hello的一半?有没有办法在replaceAll中输入概率,或者在文本中循环并在每次出现时停止?

+0

您的问题是松散定义的。它是否只需要一半?如果是这样,如何确定要替换哪个事件以及哪个不能替换?如果它不是一半,那么结果有多近似?等 – Dici

+0

@Dici我的意思是一半,但更不平坦的拆分也很好 – Alessandro

+0

注意:如果你要替换没有任何正则表达式特殊字符的字符串,使用'String.replace',而不是'String.replaceAll'。 –

回答

4

如果你想替换一半的事件,一个这样做的方式,而不计算事件发生的次数是取代ev其他情况(跳过一个,替换一个,跳过一个,替换一个...)。

String replaceHalf(String input, String search) { 
    String reversed = new StringBuilder(search).reverse().toString(); 
    StringBuilder sb = new StringBuilder(input); 
    int pos = -search.length(); 
    while (true) { 
    // Find the next occurrence... 
    pos = input.indexOf(search, pos + search.length()); 
    if (pos == -1) break; 

    // ...but ignore it, and find the next occurrence. 
    pos = input.indexOf(search, pos + search.length()); 
    if (pos == -1) break; 

    sb.replace(pos, pos + search.length(), reversed); 
    } 
    return sb.toString(); 
} 
+0

巧妙的解决方案! –

0

1 - 计数

多少子 “你好” 看Occurrences of substring in a string

How about using StringUtils.countMatches from Apache Commons Lang? 

String str = "helloslkhellodjladfjhello"; 
String findStr = "hello"; 

System.out.println(StringUtils.countMatches(str, findStr)); 

2 - 然后重复,以N/2

replaceFirst,或的indexOf,并使用您的概率模型。 ..