【问题标题】:How to replace Characters like "á" with corresponding english alphabet如何用相应的英文字母替换“á”等字符
【发布时间】:2015-04-15 23:08:27
【问题描述】:

我有一个示例字符串,例如 á、é、í、ó、ú、ü、ñ,我想替换特殊字符,例如:
有一个
é 与 e
等等..

我有一张地图,其中我有特殊字符作为键,其对应的替换作为值。
现在假设我将一个字符串“novás músíc”传递给一个正则表达式将验证它的方法,如果找到任何特殊字符(我提到的那个),那么它应该被映射的字符替换。

请帮助我进行正则表达式验证部分。

【问题讨论】:

  • 你能展示你的代码吗?
  • 您明白这些是不是“特殊”字符,对吧?如果您将其更改为 novas,那么 novás 是否会拼写错误?现在是 2015 年,在当今世界,强制语言符合英文字母表是完全没有必要和不恰当的。
  • 正则表达式不是一个一个替换字符串中一组字符的正确工具。遍历字符并在需要时替换一个字符会更有效且更简单。
  • @TJCrowder 有有效的用例,例如我在实现搜索工具时使用它 - 我向用户显示的字符串始终是原始字符串,但在内部我将两者都标准化文档和查询,因此键盘不使用重音符号的用户可以执行不带重音符号的搜索并查找带有重音符号的文档,反之亦然。
  • @IanRoberts:当然,少数非常有限的用例。但是,除非引用此类案例,否则最好驳斥这种普遍认为这些角色在某种程度上“特殊”的观点。

标签: java regex unicode normalization unicode-normalization


【解决方案1】:

您可以通过Unicode normalization 执行此操作,然后使用正则表达式删除连字标记。

查看此问题及其接受的答案:"Convert Unicode to ASCII without changing the string length (in Java)"

【讨论】:

    【解决方案2】:

    你可以使用这个正则表达式 [^0x00-0x7F]

    String source=args[0];
    Pattern p = Pattern.compile("[^0x00-0x7F]");
    Matcher m = p.matcher(source);
    
    if(map.containsKey(m.group()){
    //Replace with the value here
    }
    else{
    //put a default value for all
    }
    

    这只是基于您问题中提供的少量信息。您需要详细说明才能获得更详细的答案。这个正则表达式只会检查 ASCII 值(list here)

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 1970-01-01
      • 2013-11-04
      • 2021-04-09
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2016-10-26
      相关资源
      最近更新 更多