在程序中存储sstring和翻译的最佳方法

时间:2017-04-22 02:19:06

标签: java string internationalization

我正在制作一个计划,帮助学生为我的学校学习第二语言。该程序的主要功能是闪存卡。我遇到的麻烦是弄清楚如何存储所说的单词及其各自的翻译。阵列是最好的方法吗?我的老师已经在阵列上谈了两秒钟,所以我只知道它们的一般用途。

另外,我如何调用那些存储的相应字符串,以便用户可以看到它们?如果有更好,更有效的方式来存储它们,我很想知道。

编辑:我还计划允许用户通过文本字段或某种类型的内容输入单词,如果这会改变答案。

5 个答案:

答案 0 :(得分:0)

我认为您应该将所说的单词及其各自的翻译存储到HashMap中,其中所述单词是关键,而值是翻译。要获得存储,只需按键查找。

答案 1 :(得分:0)

Map<String, String>是将String映射到另一个Map<String, String> translatedWords = new HashMap<>(); translatedWords.put("Hello", "Hola"); System.out.println(translatedWords.get("Hello")); >> "Hola" 的完美数据类型。如果我是你,我肯定会阅读文档here

例如:

=INDEX(OFFSET($A$1:$A$5,1,0,3,1),ROW(),1)

答案 2 :(得分:0)

您可以使用2D数组,因为它使用行和列。请考虑以下示例,它是西班牙语:

String[][] array = new String[][]{
    {"You","Tu"},
    {"Sandwich","Bocadillo"},
    {"You eat a sandwich","Tu comes un bocadillo"}
};

请查看此Javadoc以获取更多信息:https://docs.oracle.com/cd/E58500_01/pt854pbh1/eng/pt/tpcr/task_CreatingandPopulatingMulti-DimensionalArrays-071663.html#topofpage

修改

看起来你正试图让用户输入他们自己的单词和翻译......除非你使用文件读写,否则这将是一个非常困难的过程。这是通过文件编写存储翻译的一种方式示例,如果我了解有关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] + "'");

尽管此代码有效,但我不建议复制/粘贴此代码,因为它的布局方式可能与您的代码不兼容。这只是ScannersPrintWritersString 拆分的示例用法,因此您可以将翻译保存到文件中各自的行中。

答案 3 :(得分:0)

它可以被视为一个简单的,也是具有挑战性的。如果您期望一个简单的想法,那么您可以使用地图。然后将密钥存储为第一语言单词,将值存储为第二语言单词,这些是地图实现

 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)

答案 4 :(得分:0)

ResourceBundle

也称为属性文件

不要使用Hashmaps和数组使代码混乱。您还可以在不编辑任何Java代码的情况下获得其他翻译

  

属性文件是一个简单的文本文件。您可以使用几乎任何文本编辑器

创建和维护属性文件
# 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");