【问题标题】:How to replace special characters in a string?如何替换字符串中的特殊字符?
【发布时间】:2011-05-16 01:31:38
【问题描述】:

我有一个包含很多特殊字符的字符串。我想删除所有这些,但保留字母字符。

我该怎么做?

【问题讨论】:

标签: java string


【解决方案1】:

这取决于你的意思。如果您只是想摆脱它们,请执行以下操作:
(更新:显然您也想保留数字,在这种情况下使用第二行)

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

或等价物:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");

(所有这些都可以通过预编译正则表达式模式并将其存储在常量中得到显着改善)

或者,Guava

private static final CharMatcher ALNUM =
  CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
  .or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);

但是,如果您想将重音字符转换为仍然是 ascii 的合理字符,请查看以下问题:

【讨论】:

  • 当我使用此功能时,它也会删除所有数字。但我不想删除数字。只想删除特殊字符。请提出一些建议..
  • 你说你只想要字母表。但我会在一分钟内更新我的答案
  • 我想连接字符串,但有一些条件,如 1.如果只有一个结果,则不需要连接 2.如果结果大于 1,则以下形式示例中的连接字符串:stack+over+流
  • @Tanu 这是一个不同的问题。让它成为一个新的
  • 如果我不想删除空格怎么办?还是说所有空格(如制表符、换行符)都折叠为一个空格?
【解决方案2】:

我正在使用这个。

s = s.replaceAll("\\W", ""); 

它替换字符串中的所有特殊字符。

这里

\w : 单词字符,[a-zA-Z_0-9]的缩写

\W : 非单词字符

【讨论】:

  • 不适用于 。如何删除''、'\'字符?
【解决方案3】:

您可以使用以下方法保留字母数字字符。

replaceAll("[^a-zA-Z0-9]", "");

如果您只想保留字母字符,请使用此

replaceAll("[^a-zA-Z]", "");

【讨论】:

  • 空间使用replaceAll("[^a-zA-Z0-9 ]", "");
【解决方案4】:

替换任何特殊字符
replaceAll("\\your special character","new character");

ex: 用空格替换所有出现的 *

replaceAll("\\*","");

*此语句一次只能替换一种特殊字符

【讨论】:

  • 当我看到问题标题“如何替换字符串中的特殊字符?”时,这绝对是我想要的。谢谢!
【解决方案5】:

按照Andrzej Doyle's answer的例子,我认为更好的解决方案是使用org.apache.commons.lang3.StringUtils.stripAccents()

package bla.bla.utility;

import org.apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}

【讨论】:

    【解决方案6】:
    string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
    

    这里所有的特殊字符除了空格、逗号和 & 符号都被替换了。您还可以通过以下正则表达式省略空格、逗号和 & 符号。

    string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
    

    其中 Input 是我们需要替换字符的字符串。

    【讨论】:

      【解决方案7】:

      这是我用来从字符串中删除所有可能的特殊字符的函数

      let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();
      

      【讨论】:

      • 你能解释一下正则表达式吗?
      • 我建议您在答案部分添加注释以解释您的代码。请阅读更多关于how to write good answers的信息。
      【解决方案8】:

      您可以对字符串使用基本的正则表达式来查找所有特殊字符,或使用模式和匹配器类来搜索/修改/删除用户定义的字符串。此链接有一些简单易懂的正则表达式示例:http://www.vogella.de/articles/JavaRegularExpressions/article.html

      【讨论】:

        【解决方案9】:

        您可以从 pc 窗口中的字符映射工具获取该垃圾字符的 unicode 并添加 \u 例如\u00a9 为版权符号。 现在您可以将该字符串与该特定的垃圾字符一起使用,不要删除任何垃圾字符,而是用正确的 unicode 替换。

        【讨论】:

          【解决方案10】:

          对于空格使用“[^a-z A-Z 0-9]”这个模式

          【讨论】:

            猜你喜欢
            • 2014-12-07
            • 1970-01-01
            • 2016-09-27
            • 1970-01-01
            相关资源
            最近更新 更多