Java 在程序中存储字符串和翻译的最佳方法
我正在为学校制定一个帮助学生学习第二语言的计划。该程序的主要功能是闪存卡。我遇到的问题是如何存储所说的单词及其各自的翻译。阵列是最好的方法吗?我的老师就数组讲了整整两秒钟,所以我只知道数组的一般用途 另外,我如何调用这些存储的、对应的字符串,以便用户可以看到它们?如果有更好、更有效的方法来储存它们,我很想知道Java 在程序中存储字符串和翻译的最佳方法,java,string,internationalization,Java,String,Internationalization,我正在为学校制定一个帮助学生学习第二语言的计划。该程序的主要功能是闪存卡。我遇到的问题是如何存储所说的单词及其各自的翻译。阵列是最好的方法吗?我的老师就数组讲了整整两秒钟,所以我只知道数组的一般用途 另外,我如何调用这些存储的、对应的字符串,以便用户可以看到它们?如果有更好、更有效的方法来储存它们,我很想知道 编辑:我还计划允许用户通过文本字段或类似的方式输入单词,如果这改变了答案。我认为您应该将所述单词及其各自的翻译存储到一个文件中,其中所述单词为关键字,值为翻译。要获取存储的数据,只需按键查
编辑:我还计划允许用户通过文本字段或类似的方式输入单词,如果这改变了答案。我认为您应该将所述单词及其各自的翻译存储到一个文件中,其中所述单词为关键字,值为翻译。要获取存储的数据,只需按键查找。A
Map
将是将一个字符串映射到另一个的完美数据类型。如果我是你,我肯定会仔细阅读这些文件
例如:
Map<String, String> translatedWords = new HashMap<>();
translatedWords.put("Hello", "Hola");
System.out.println(translatedWords.get("Hello"));
>> "Hola"
Map translatedWords=new HashMap();
翻译的单词。放(“你好”,“你好”);
System.out.println(translatedWords.get(“Hello”);
>>“你好”
您可以使用2D数组,因为它使用行和列。考虑下面的例子,它是西班牙语:
String[][] array = new String[][]{
{"You","Tu"},
{"Sandwich","Bocadillo"},
{"You eat a sandwich","Tu comes un bocadillo"}
};
查看此Javadoc了解更多信息:
编辑:
看起来您正试图让用户输入他们自己的单词和翻译。。。除非您使用文件读写,否则这将是一个非常困难的过程。这是一个通过文件写入存储翻译的示例,如果我了解有关2D
ArrayLists
的更多信息,我将与您联系
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a word:");
String word = sc.nextLine();
//You can also use textfields: word = textfield.getText();
System.out.println("Please enter the translation:");
String trans = sc.nextLine();
//Always use UTF-8 if you are using any European or American alphabets
PrintWriter pw = new PrintWriter("lang.txt", "UTF-8");
/*
* You can name the file anyting you want, with any extension:
*"Cake.weirdFile, Juice.lump, Ilike.Chicken"
*it should be readable by Java as long as you use UTF-8
*/
pw.print(word);
pw.println(trans);
pw.close();
//Make sure to catch/throw FileNotFoundException & UnsupportedEncodingException
您还可以阅读闪存卡测验/评论文件:
Scanner sc2 = new Scanner(new File("lang.txt"));
//Make sure to catch/throw FileNotFoundException
String[] wordAndTrans = sc2.nextLine().split(" ");
sc2.close();
System.out.println("The translation of '"
+ wordAndTrans[0] + "' is: '" + wordAndTrans[1] + "'");
尽管这段代码有效,但我不建议复制/粘贴它,因为它的布局方式可能与您的代码不兼容。这仅仅是扫描仪
、打印机
和字符串
拆分的一个示例用法,这样您就可以将您的翻译保存到文件中各自的行中。它可以被视为一个简单的操作,也可以被视为一个具有挑战性的操作。如果你想要一个简单的想法,那么你可以使用地图。然后将关键字存储为第一语言单词,将值存储为第二语言单词,这些是map实现
HashMap (if you need more speed then use this implementation)
Map<String,String> translatedValues = new HashMap();
LinkedHahMap (If you need the data as the same oreder of insertion)
TreeMap (Less speed but sorted one)
HashMap(如果需要更高的速度,请使用此实现)
Map translatedValues=新的HashMap();
LinkedHahMap(如果您需要与插入顺序相同的数据)
树映射(速度较低,但已排序)
也称为属性文件
不要用Hashmaps和数组把代码弄得乱七八糟。您还可以在不编辑任何Java代码的情况下进行其他翻译
属性文件是一个简单的文本文件。您可以使用几乎任何文本编辑器创建和维护属性文件
为了支持其他语言环境,本地化程序将创建一个新的属性文件,其中包含转换后的值。不需要更改源代码,因为程序引用的是键,而不是值
使用
我如何允许用户输入他们自己的单词,而不是一些预先确定的单词?谢谢你的回答@A.价格是否有特定数量的单词可以输入?因为如果没有,那么我们将不得不使用一个2d ArrayList,这是一个费劲制作的…。@a.Price如果您对输入没有限制,那么存储在一个对象中几乎是不可能的(至少对我来说)。考虑我的编辑
# This is the default LabelsBundle.properties file
s1 = computer
s2 = disk
s3 = monitor
s4 = keyboard
# This is the LabelsBundle_de.properties file
s1 = Computer
s2 = Platte
s3 = Monitor
s4 = Tastatur
Locale currentLocale;
ResourceBundle labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
String computer = labels.getString("s1");