gpt4 book ai didi

java - 替换/添加字符串中的字符集

转载 作者:行者123 更新时间:2023-12-01 19:18:58 24 4
gpt4 key购买 nike

我想替换一些字符集,我使用了 CharMatcher为此,我需要增强一种方法 - 随着替换,我现在还需要在前面添加一些字符,例如 '%' -> '!%' ,我不知道如何做到这一点 Guava 所以看完后this question ,我为此目的使用了正则表达式。代码类似于 -

s.replaceAll("['\\\\]", "\\\\$0");

但它是同一方法的一部分,在同一方法中使用 CharMather 和 regex 进行字符串操作看起来有点不一致,所以我只是想知道是否也可以使用 CharMatcher 来实现此目的。
我没有测试正则表达式方法是否比 CharMatcher 更快,反之亦然,但如果 CharMatcher 可以处理这个问题,那么我想看看如何处理,也想知道哪种方法更有效。

最佳答案

好的,我想我明白你想做什么。

Guava 的 CharMatcher 不允许您在替换 CharSequence 中引用匹配的字符(“反向引用”)。

例如,如果您想将“i”替换为“!i”,将“j”替换为“!j”,则不能这样做:

String string = ...;
CharMatcher.anyOf("ij").replaceFrom(string, "!$0");

你必须这样做:

String string = ...;
string = CharMatcher.is('i').replaceFrom(string, "!i");
string = CharMatcher.is('j').replaceFrom(string, "!j");

这很烦人,因为代码更脏(更多代码),并且性能较差(字符串字符将被迭代多次)。

如果您发现自己经常这样做,我想您可以创建一个受 CharMatcher.replaceFrom() 启发的实用方法,当字符与给定的 CharMatcher 匹配时,该方法会在前面添加一个字符串:

public static String prepend(CharSequence sequence, CharMatcher charMatcher, CharSequence toPrepend) {
if (toPrepend.length() == 0) {
return sequence.toString();
}

String string = sequence.toString();
int pos = charMatcher.indexIn(string);
if (pos == -1) {
return string;
}

int len = string.length();
StringBuilder buf = new StringBuilder((len * 3 / 2) + 16);

int oldpos = 0;
do {
buf.append(string, oldpos, pos);
buf.append(toPrepend);
buf.append(string.charAt(pos));
oldpos = pos + 1;
pos = charMatcher.indexIn(string, oldpos);
} while (pos != -1);

buf.append(string, oldpos, len);
return buf.toString();
}

并像这样使用它:

MyCharMatchers.prepend(string, CharMatcher.anyOf("aei"), "!");

我不知道对性能的影响。我认为 CharMatcher 比正则表达式更快,但你必须 benchmark这是肯定的。

关于java - 替换/添加字符串中的字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com