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");