java - 将一个字符替换为不同的字符,具体取决于它是哪个字符

标签 java regex string diacritics

我已经搜索过 SO(和 Google)但没有找到与我的问题完全匹配的答案:

我想用另一个字符替换 String 中的所有瑞典语字符和空格。我希望它按如下方式工作:

  • “å”和“ä”应替换为“a”
  • “ö”应替换为“o”
  • “Å”和“Ä”应替换为“A”
  • “Ö”应替换为“O”
  • ""应替换为"-"

这可以用正则表达式(或任何其他方式)实现吗?如果可以,如何实现?

当然,下面的方法可以完成这项工作(并且可以改进,我知道,例如通过替换同一行上的“å”和“ä”):

private String changeSwedishCharactersAndWhitespace(String string) {
    String newString = string.replaceAll("å", "a");
    newString = string.replaceAll("ä", "a");
    newString = string.replaceAll("ö", "o");
    newString = string.replaceAll("Å", "A");
    newString = string.replaceAll("Ä", "A");
    newString = string.replaceAll("Ö", "O");
    newString = string.replaceAll(" ", "-");
    return newString;
}

我知道如何使用正则表达式将所有“å”、“ä”或“ö”替换为“”。问题是如何根据使用正则表达式的字符将其替换为另一个字符?肯定有比上述方法更好的使用正则表达式的方法吗?

最佳答案

对于带有变音符号的拉丁字符,检索基本字母代码 + 变音符号组合代码的 unicode 规范化(java 文本)可能会有所帮助。像这样的东西:

import java.text.Normalizer;
newString = Normalizer.normalize(string,
        Normalizer.Form.NFKD).replaceAll("\\p{M}", "");

关于java - 将一个字符替换为不同的字符,具体取决于它是哪个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396593/

相关文章:

javascript - 如何理解正则表达式 '\b' ?

python字符串操作

php - 正则表达式 plus 与 star 的区别?

c++ - cin std::string 带空格

java - 字符串的长度变化和保存长度不变的int

java - 哪个版本的java源代码是用protoc生成的?

java - 如何启用 github 操作以访问 secret 属性文件

java - Spring + Maven + Intellij +HelloWorld

java - 配置 Glassfish SSL 证书昵称的正确方法?

java - 在长 java 字符串中查找行号和列号