【问题标题】:replace special characters in string in java在java中替换字符串中的特殊字符
【发布时间】:2010-04-09 14:20:57
【问题描述】:

我想知道如何在 Java 中替换字符串。

例如

String a = "adf�sdf";

如何替换和避免特殊字符?

【问题讨论】:

  • 欢迎来到 SO,查希尔!你从哪里得到你的字符串?随机用户?网络服务?您是想用该字符串替换某些内容,还是使用该字符串替换其他内容?

标签: java regex string


【解决方案1】:

您可以使用String#replaceAll()[^\\x20-\\x7e] 替换为空字符串,从而消除printable ASCII range 之外的所有字符:

a = a.replaceAll("[^\\x20-\\x7e]", "");

但这实际上并没有解决您的实际问题。这更像是一种解决方法。有了给定的信息,很难确定这个问题的根本原因,但阅读这些文章中的任何一篇都必须有很大帮助:

【讨论】:

  • 嗯,好像有一个 markdown 错误(链接 2 没有正确解析),但我似乎无法找到/修复它?
  • @BalusC:一直发生在我身上(因为我经常链接到 Java6 文档),你想用 %20 替换结尾附近的空格。
  • @T.J.是的,就是这样,谢谢 :) 顺便说一句:Firefox 通常会在粘贴之前转义它们,但由于某些奇怪的原因它没有正确发生。我重新创建了链接,问题就消失了。
  • @BalusC:我觉得非常讽刺的是,你指出了 Joel 的一篇文章……他关于 Unicode 的第一篇文章充满了错误和误解:我记得他发布它并认为“WTF!?”。这是乔尔“啊,我明白了”令人难忘的时刻,那是充满的错误。实际上,自从他在 Unicode 上发表了他的第一篇文章后,我就开始接受他所说的所有内容,并且一直对他说的话持保留态度;)
  • @Wiz:这也是我自己写另一个来澄清一个和另一个的原因之一,即使是简单的术语和实际的例子和解决方案。但是.. Joel 的文章中的错误真的没有您所暗示的那样很多
【解决方案2】:

如果不了解更多上下文,很难回答这个问题。

一般来说,您可能会遇到编码问题。有关字符编码的概述,请参阅 The Absolute Minimum Every Software Developer (...) Must Know About Unicode and Character Sets

【讨论】:

    【解决方案3】:

    假设你想删除所有特殊字符,可以使用字符类\p{Cntrl}那么你只需要使用如下代码:

    stringWithSpecialCharcters.replaceAll("\\p{Cntrl}", replacement);
    

    【讨论】:

    • 如果您假设“特殊字符”表示 ASCII 控制字符,则该方法有效。根据我的经验,它通常意味着标点符号,但在这种情况下,这是任何人的猜测。
    【解决方案4】:

    您可以使用 unicode 转义序列(例如 \u201c [开头的花括号])来“避免”无法直接用于源文件编码的字符(默认为您平台的默认编码) , 但您可以使用-encoding 参数将其更改为javac)。

    【讨论】:

    • 源文件编码默认为平台默认编码,即通常不是UTF-8。
    • @Michael:谢谢,已修复。我不只是发明它,我想知道它实际上与什么语言/环境相关? ;-) 或者是在 1996 年还是什么时候……
    • 我对此表示怀疑,因为 UTF-8 直到 1993 年才被指定,而 Java 过去曾建议在分发源代码之前使用 native2ascii。不过,我希望 UTF-8 在一些较新的系统中成为默认值。
    • @Michael:1993 年早于 1996 年,我记得 Java 支持这些奇怪的 Unicode 东西真是太棒了,所以它可能,虽然不太可能。 ;-) (native2ascii, crikey, 这是过去的一次爆炸) 谢谢,不过,无论如何,信息预编辑在 2010 年显然是错误的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多