2

这可能是在其他地方问过的 - 不幸的是,谷歌搜索是一件相当困难的事情。

经常在编程时,我发现自己使用表单的构造(我特别在寻找 Java 答案,但我会对通用解决方案着迷)

String a = getStringFromPlace();
a=processStringInSomeWay(a);
sendStringToSomePlace(a); 

我的问题是 processStringInSomeWay(a) 如果给定某个特定字符“£”就会中断,所以我最终写了这个......

String a = getStringFromPlace();
a=a.replace("£","replacevalue");
a=processStringInSomeWay(a);
a=a.replace("replacevalue","£");
sendStringToSomePlace(a); 

但是,如果“replacevalue”恰好在输入中,这当然会中断。我可以选择一个荒谬的“replacevalue”值,但这显然不是一个好习惯。在这种情况下,最佳做法是什么?

编辑 - 这是在一个无法控制“processStringInSomeWay()”方法的特殊情况下。而且我也对必须作为一个单元处理,不能拆分的情况感兴趣。

4

4 回答 4

2

从某种意义上说,您的问题非常笼统,在不知道您需要对这些字符串做什么的情况下,几乎不可能给出一个准确的答案。

我看到的解决方案是:

  • 直接删除该方法不应处理的字符(例如replaceAll("£","")
  • 更改处理方法以跳过当前版本中未处理的字符
  • 每当找到不需要的字符时拆分字符串并分别处理它们
  • 只需为每个非托管符号放置一个始终相同的转义序列(例如replaceAll("£",escape+"£")

这个问题在很多情况下都很常见,从我所看到的情况来看,你通常只是决定你有一个不能自然使用的序列,因为它被用作转义序列。在压缩协议、网络协议和许多其他情况下都是如此。

于 2012-11-27T14:22:21.797 回答
0

恕我直言,最佳做法是进行修复processStringInSomeWay(a);,以免损坏。即所以你不需要这个工作。

假设您必须使用变通方法,您可以使用几乎 65536 个可能的字符,因此您可以选择其中一个(或组合)

注意:有两个非字符\uFFFE\uFFFF它们被定义为“非字符”。您可以假设这些永远不会出现在有效文本中。http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters

于 2012-11-27T14:21:21.250 回答
0

如果要替换,请使用当前未在 Unicode 中定义的字符。

但是,我会更改或重载 processStringInSomeWay 以获取 String[],在要替换的字符处拆分,然后再连接。

于 2012-11-27T14:28:11.947 回答
0

我对 java 不是 100% 确定,但你能做这样的事情吗:

a=processStringInSomeWay(a.replace("£",""));

它会从传递给 process 函数的字符串中删除 £ 而不会更改a

于 2012-11-27T15:22:17.150 回答