我想将句子中单词的每个元音改为一些阿拉伯语unicode。我有像
这样的输入each vocal of letter each word in a sentence change into unicode use substring on java
使用子串替换规则
String[][] replacements1 = {
{"a", "\u0627"},
{"i", "\u0627\u064A"},
{"u", "\u0627\u0648"},
{"e", "\u0627\u064A"},
{"o", "\u0627\u0648"} }
我使用空格分割为.split(" ")
的数组,但这并不起作用。我切换到使用charAt()
,但因为这超过1个字符或字符串,我需要使用一些正则表达式为子字符串replacement[][]
定义每个索引0,而不影响单词中的另一个元音。我怎么能这样做?
输出应该是这样的:
\u0627\u064Aach vocal \u0627\u0648f letter \u0627\u064Aach word \u0627\u064An \u0627 sentence change \u0627\u064Anto unicode \u0627\u0648se substring \u0627\u0648n java"
答案 0 :(得分:1)
根据正则表达式Matcher
(也捕获单词的其他部分),使用"\\b([^aeiou]*)([aeiou])(\\w*)\\b"
查找每个单词中的所有第一个元音。
使用Matcher
提供的API,可以轻松构建替换后的字符串。
String str = "each vocal of letter each word in a sentence change into unicode use substring on java";
Map<String, String> replacements = new HashMap<String, String>() {{
put("a", "\u0627");
put("i", "\u0627\u064A");
put("u", "\u0627\u0648");
put("e", "\u0627\u064A");
put("o", "\u0627\u0648");
}};
Pattern pattern = Pattern.compile("(?i)(.*?)\\b([^aeiou]*)([aeiou])(\\w*)\\b");
Matcher matcher = pattern.matcher(str);
StringBuffer buf = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(buf, "$1$2" + replacements.get(matcher.group(3)) + "$4");
}
matcher.appendTail(buf);
String replaced = buf.toString();
上述代码已经过测试并产生了预期的结果。
顺便说一下,我从替换字符串中删除了反斜杠,以避免插入阿拉伯字符,因此我可以看到逻辑有效,因为很难看到在打印混合权利时发生了什么从左到右的字符)。