进行字符串替换时的临时占位符...(Java,但一般解决方案会很有用)

时间:2012-11-27 14:15:46

标签: java string

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

通常在编程时我会发现自己的形式构造(我特别关注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 个答案:

答案 0 :(得分:2)

你的问题非常通用,因为不知道你需要对这些字符串做什么几乎不可能给出一个确切的答案。

我看到的解决方案是:

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

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

答案 1 :(得分:0)

恕我直言最佳做法是修复processStringInSomeWay(a);所以它不会破坏。即所以你不需要这项工作。

假设你必须使用一种解决方法,你可以使用几乎65536个可能的字符串,所以你可以选择其中一个(或组合)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我对java不是100%肯定,但你可以做这样的事情:

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

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