Используйте Matcher
, чтобы найти все первые гласные в каждом слове на основе регулярного выражения "\\b([^aeiou]*)([aeiou])(\\w*)\\b"
(которое также охватывает другие части слова).
Используйте API, предоставленный Matcher
, чтобы упростить создание замененной строки.
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();
Приведенный выше код был протестирован и дает желаемый результат.
Кстати, я удалил обратную косую черту из строк замены, чтобы избежать вставки арабских символов, чтобы я мог увидеть , что логика работала, так как трудно увидеть, что происходит при печати смеси справа налево и символы слева направо).