用其他字组替换字符串中的所有单词集

时间:2014-03-21 17:26:11

标签: java regex string replace

我试图翻转字符串中的每个希伯来字符集。假设我有这个字符串(而不是希伯来字母,我将使用符号):

§♀♠♪ this is my message♣♠♦►♣

(你可以告诉哪个字符是哪种语言)。 我希望这个字符集 - §♀♠♪替换为♪♠♀§

但是,我希望将message♣♠♦►♣替换为message♣►♦♠♣,因此只有其中的英文单词才会保持不变。

我该怎么做? (是的,我知道我不能在常规字符串中使用这些符号,但这只是一个例子。)

2 个答案:

答案 0 :(得分:1)

此解决方案基于OP提供的示例(具有♣♣♦►♣的示例),但未在实际数据上进行测试。

  • 您应该能够通过\p{InHebrew}{2,}找到两个或更多希伯来字符的序列。

  • 当您找到它们时,您可以使用String#reverse方法来反转它们。

  • 最后一件事是使用appendReplacement中的appentTailMatcher创建包含更新匹配部分的新字符串。

这是一个应该做你想做的事情的例子

String yourString = ...;//place for your string
Pattern p = Pattern.compile("\\p{InHebrew}{2,}");
Matcher m = p.matcher(yourString);

StringBuffer sb = new StringBuffer();

while(m.find()){
    m.appendReplacement(sb, new StringBuilder(m.group()).reverse().toString());
}
m.appendTail(sb);

String reversedSpecial = sb.toString();
System.out.println(reversedSpecial);

答案 1 :(得分:0)

假设有一个输出缓冲区保留最终字符串:遇到希伯来字符时,将其读入堆栈,直到找到英文字符,然后将堆栈中的所有字母弹出到输出缓冲区;英文字母直接移动到输出缓冲区。