我想要一个翻译 ex:英语到西班牙语。
我想将大文翻译成翻译地图。
HashMap <String, Object> hashmap = new HashMap <String, Object>();
hashmap.put("hello", "holla");
.
.
.
我应该使用如何进行大型替换?没有迭代每个单词与地图的每个元素?
我不想删除字符串中的每个单词,并看到我的地图中有匹配
也许带有单词首字母的多图?
如果您有任何答案或建议,谢谢
答案 0 :(得分:1)
以下是一个示例实现:
import java.io.*;
import java.util.*;
public class Translator {
public enum Language {
EN, ES
}
private static final String TRANSLATION_TEMPLATE = "translation_%s_%s.properties";
private final Properties translations = new Properties();
public Translator(Language from, Language to) {
String translationFile = String.format(TRANSLATION_TEMPLATE, from, to);
try (InputStream is = getClass().getResourceAsStream(translationFile)) {
translations.load(is);
} catch (final IOException e) {
throw new RuntimeException("Could not read: " + translationFile, e);
}
}
private String[] translate(String text) {
String[] source = normalizeText(text);
List<String> translation = new ArrayList<>();
for (String sourceWord : source) {
translation.add(translateWord(sourceWord));
}
return translation.toArray(new String[source.length]);
}
private String translateWord(String sourceWord) {
Object value = translations.get(sourceWord);
String translatedWord;
if (value != null) {
translatedWord = String.valueOf(value);
}
else {
// if no translation is found, add the source word with a question mark
translatedWord = sourceWord + "?";
}
return translatedWord;
}
private String[] normalizeText(String text) {
String alphaText = text.replaceAll("[^A-Za-z]", " ");
return alphaText.split("\\s+");
}
public static void main(final String[] args) {
final Translator translator = new Translator(Language.EN, Language.ES);
System.out.println(Arrays.toString(translator.translate("hello world!")));
}
}
并在您的类路径上放置一个名为'translation_EN_ES.properties'的文件(例如src / main / resources):
hello=holla
world=mundo
答案 1 :(得分:1)
如果您事先知道所有单词,则可以轻松创建正则表达式 然后在运行时,编译一次正则表达式。那你很高兴。
要创建正则表达式,请下载并安装RegexFormat 5 here。
从主菜单中选择工具 - &gt;正则表达式的字符串 - 三元树
将列表粘贴到输入框中,然后按生成按钮
它吐出一个完整的正则表达式Trie,它与任何哈希查找一样快。
将该对话框的压缩输出复制到 Rxform 标签(mdi)窗口
右键单击窗口以获取上下文菜单,选择 Misc Utilities - &gt;换行
将其设置为大约60个字符的宽度,按确定。
接下来,从Windows工具栏中按 C ++ 按钮调出 MegaString
对话。单击制作C风格的字符串 Lines Catenated-1 按OK
将结果复制并粘贴到Java源代码中。
使用带有回调的Replace-All中的正则表达式
在回调中,使用匹配作为哈希表中的键以返回
翻译替换。
它简单,一次通过哦,这么快。
有关该工具的更极端示例,请参阅130,000字词典的this正则表达式。
字母 X
的样本"(?:x(?:anth(?:a(?:m|n|te(?:s)?)|e(?:in|ne)|i(?:an|"
"c|n(?:e)?|um)|o(?:ma(?:s|ta)?|psia|us|xyl))|e(?:be"
"c(?:s)?|n(?:arthral|i(?:a(?:l)?|um)|o(?:biotic|cry"
"st(?:s)?|g(?:amy|enous|raft(?:s)?)|lith(?:s)?|mani"
"a|n|ph(?:ile(?:s)?|ob(?:e(?:s)?|ia|y)|ya)|time))|r"
"(?:a(?:fin(?:s)?|n(?:sis|tic)|rch|sia)|ic|o(?:derm"
"(?:a|i(?:a|c))|graphy|m(?:a(?:s|ta)?|orph(?:s)?)|p"
"h(?:agy|ily|yt(?:e(?:s)?|ic))|s(?:is|tom(?:a|ia))|"
"t(?:es|ic))))|i(?:pho(?:id(?:al)?|pag(?:ic|us)|sur"
"an))?|oan(?:a|on)|u|y(?:l(?:e(?:m|n(?:e(?:s)?|ol(?"
":s)?))|i(?:c|tol)|o(?:carp(?:s)?|g(?:en(?:ous)?|ra"
"ph(?:s|y)?)|id(?:in)?|l(?:ogy|s)?|m(?:a(?:s)?|eter"
"(?:s)?)|nic|ph(?:ag(?:an|e(?:s)?)|on(?:e(?:s)?|ic)"
")|rimba(?:s)?|se|tomous)|yl(?:s)?)|st(?:er(?:s)?|i"
"|o(?:i|s)|s|us)?)))"