我搜索了SO(和Google),但没有找到任何与我的问题完全匹配的答案:
我想将String
中的所有瑞典字符和空格替换为另一个字符。我希望它的工作方式如下:
这可以通过正则表达式(或任何其他方式)来实现,如果是这样,怎么做?
当然,下面的方法完成了这项工作(我知道,可以通过在同一行上替换“å”和“ä”来改进):
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;
}
我知道如何使用正则表达式替换所有“å”,“ä”或“ö”和“”。问题是如何使用正则表达式替换字符取决于它是哪个字符?使用正则表达式肯定有比上述方法更好的方法吗?
答案 0 :(得分:4)
对于带有变音符号的拉丁字符,用于检索基本字母代码+变音符号组合代码的unicode规范化(java文本)可能会有所帮助。类似的东西:
import java.text.Normalizer;
newString = Normalizer.normalize(string,
Normalizer.Form.NFKD).replaceAll("\\p{M}", "");
答案 1 :(得分:3)
您可以使用StringUtils.replaceEach,如下所示:
private String changeSwedishCharactersAndWhitespace(String string) {
String newString = StringUtils.replaceEach (string,
new String[] {"å", "ä", "ö", "Å", "Ä", "Ö", " "},
new String[] {"a", "a", "o", "A", "A", "O", "-"});
return newString;
}
答案 2 :(得分:3)
我认为没有一个普通的正则表达式可以立即替换这些字符。除此之外,您还可以使用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());
答案 3 :(得分:0)
您可以使用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
与
Hello Warld