Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据字符的不同,使用不同的字符替换字符_Java_Regex_String_Diacritics - Fatal编程技术网

Java 根据字符的不同,使用不同的字符替换字符

Java 根据字符的不同,使用不同的字符替换字符,java,regex,string,diacritics,Java,Regex,String,Diacritics,我搜索了SO(和谷歌),但没有找到与我的问题完全匹配的答案: 我想用另一个字符替换字符串中的所有瑞典语字符和空格。我希望它的工作如下: “å”和“ä”应改为“a” “ö”应替换为“o” “Å”和“Ä”应替换为“A” “Ö”应改为“O” “”应替换为“-” 这可以通过正则表达式(或任何其他方式)实现吗?如果可以,如何实现 当然,下面的方法可以做到这一点(我知道,可以通过替换同一行中的“å”和“ä”来改进): 例如,我知道如何使用regex将所有“å”、“ä”或“ö”替换为“”。问题是如何使用r

我搜索了SO(和谷歌),但没有找到与我的问题完全匹配的答案:

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

  • “å”和“ä”应改为“a”
  • “ö”应替换为“o”
  • “Å”和“Ä”应替换为“A”
  • “Ö”应改为“O”
  • “”应替换为“-”
这可以通过正则表达式(或任何其他方式)实现吗?如果可以,如何实现

当然,下面的方法可以做到这一点(我知道,可以通过替换同一行中的“å”和“ä”来改进):

例如,我知道如何使用regex将所有“å”、“ä”或“ö”替换为“”。问题是如何使用regex替换一个字符,具体取决于它是哪个字符?肯定有比上面的aproach更好的使用regex的方法吗?

您可以使用,如下所示:

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

我认为没有一个通用的正则表达式可以立即替换这些字符。除此之外,您还可以通过使用
HashMap
来简化替换工作

HashMap<String, String> map = new HashMap<String, String>()
                              {{put("ä", "a"); /*put others*/}};

for (Map.Entry<String, String> entry : map.entrySet())
    newString = string.replaceAll(entry.getKey(), entry.getValue());
HashMap=newhashmap()
{{put(“a”,“a”);/*put others*/};
对于(Map.Entry:Map.entrySet())
newString=string.replaceAll(entry.getKey(),entry.getValue());

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

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

您可以使用matcher.find方法编写自己的映射程序:

public static void main(String[] args) {
    String from = "äöÂ";
    String to   = "aoA";
    String testString = "Hellö Wärld";

    Pattern p = Pattern.compile(String.format("[%s]", from));
    Matcher m = p.matcher(testString);
    String result = testString;
    while (m.find()){
        char charFound = m.group(0).charAt(0);
        result = result.replace(charFound, to.charAt(from.indexOf(charFound)));
    }

    System.out.println(result);
}
这将取代

Hellö Wärld


去掉所有的变音符号对你有用吗?。。。可能是带有回调的正则表达式,但不是普通的搜索和替换。由于Java没有一流的函数,这将变得非常笨拙。坚持你所拥有的。@Zutty谢谢,但我真正的问题是我不想让它们被移除,而是要根据角色的不同来替换它们。否则我会做一些类似于你的建议的事情。@Zutty改变了我的想法,链接的问题/答案实际上包含了我问题的答案。因为英语不是我的母语,所以我不知道“diacritic”这个词,我想整个字符都会被删除。你可以使用
newhashmap{{put(“ä”,“a”);…}()
@JanDvorak挤出几个字节,谢谢你的好提示。您的代码段有语法错误,无论如何,我在代码中包含了正确的版本。
Hellö Wärld
Hello Warld