2014-02-28 36 views
0

我正在进行一项练习,将数字从文本文件转换为文字,程序应在我的NumberTranslator类的翻译方法中显示其背后的数学运算符,以及它应该从一串数字中取出每个单独的数字并将其转换为其文本值。将充满数字的文本文档转换为文字

举例来说,如果我有一个文本文件,读取

1234 

12 

34 

输出将是:

1234: One Two Three Four 

12: One Two 

34: Three Four 

这里是我到目前为止,我相信我已经在文件中读取正确,但我不确定,而且我也不确定我的numberTranslator类中的translate()方法。

package hw05; 

import java.io.File; 
import java.io.FileReader; 
import java.util.Scanner; 
import java.io.IOException; 

public class Main { 

public static void main(String[] args) throws java.lang.Exception { 

} 

public static String readfile(String filename) { //reads the file translate.txt 
    String content = null; 
    File file = new File("translate.txt"); 
    try { 
     FileReader reader = new FileReader("translate.txt"); 
     char[] chars = new char[(int) file.length()]; 
     reader.read(chars); 
     content = new String(chars); 
     reader.close(); 


    } catch (IOException e) { 
    } 
    return content; 

} 
} 

这里是我的numberTranslator类。

package hw05; 


public class NumberTranslator extends Main { 

private static final String[] words = {"Zero", "One", "Two", "Three", 
     "Four", "Five", "Six", "Seven", "Eight", "Nine"}; 

public String translate(int number){ 
    if (number < 10){ 
     return words[number]; 
    } 
    String result = ""; 
    while (number >0) { 
     if (!"".equals(result)){ 
      result = "" + result; 
     } 
     result = words[number % 10] + result; 
     number = number/10; 

    } return result; 


} 

} 
+0

您是否通过代码运行了一些示例文件以确保其行为正确? –

+0

我想知道如何调用我的NumberTranslator类来实际翻译文本文件,我现在已经迷失了。 – Tonno22

+0

您可能想要在'main'方法中编写一些代码,否则在运行程序时不会发生任何事情。 –

回答

1

可以读取该文件,并像下面翻译一下:

BufferedReader br = new BufferedReader(new FileReader(file)); 
String line; 
int num = 0; 
NumberTranslator myAwesomeTranslator = new NumberTranslator(); 
while ((line = br.readLine()) != null) { 
    try { 
     num = Integer.parseInt(line); 
     System.out.println(myAwesomeTranslator.translate(num)); 
    } catch (NumberFormatException e) { 
     System.out.println("I thought you were an int :("); 
    } 
} 
br.close(); 
+0

我应该显示它背后的数学,我不应该使用字符串或字符操作来为我分割数字,我们应该自己做,就像123号我们将3个转换为3个并添加到最后的字符串,起飞2转换为两个添加到最后的字符串等 – Tonno22

+0

哦,那么你需要使用重复除以10和一些减法来获得数字:) –

+0

我怎样才能测试我到目前为止?我应该在我的主要方法中加入什么? – Tonno22

0

尝试......

public String translate(int number){ 
    String numberString = Integer.toString(number); 
    String result = ""; 
    for (int i = 0; i < numberString.length(); i++) { 
     char letter = numberString.charAt(i); 
     result += words[Integer.parseInt(letter)] + " "; 
    } 
    return result; 

我没有测试它,但你应该明白我的意思,你会喜欢必须添加一些异常处理。

+0

我的翻译方法有什么问题吗? – Tonno22

+0

你说你怀疑有。我想告诉你我认为更简单的选择。 – jeremyjjbrown

0

这里是你如何能做到这一点:

  1. 创建一个具有写在字从0到9的数字数组。
  2. 开始使用BufferedReader读取文件。
  3. 对于以String获得的每一行,获取length(),并从0开始迭代到length - 1。使用charAt()获取号码。
  4. 解析为一个整数使用Integer.parseInt()
  5. 索引你的数组以获得翻译。
0

尝试使用地图,

public static void main(String[] args) throws FileNotFoundException, IOException 
    { 
     Map<Integer, String> wordMap = new HashMap<Integer, String>(); 
     wordMap.put(0, "Zero"); 
     wordMap.put(1, "One"); 
     wordMap.put(2, "Two"); 
     wordMap.put(3, "Three"); 
     wordMap.put(4, "Four"); 
     wordMap.put(5, "Five"); 
     wordMap.put(6, "Six"); 
     wordMap.put(7, "Seven"); 
     wordMap.put(8, "Eight"); 
     wordMap.put(9, "Nine"); 

     String fileName = "location\file"; 
     BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(fileName))); 

     String content = null; 
     while((content = bufferedReader.readLine()) != null) 
     { 
      for(char number : content.toCharArray()) 
      { 
       System.out.print(wordMap.get(Character.getNumericValue(number))); //write into another file 
      } 
      System.out.println(""); 
     } 
    } 
+2

地图在这里是一个矫枉过正。不需要。 :) –

0

对于文本替换正则表达式是非常有用的:

private static final String[] words = {" Zero", " One", " Two", " Three", 
      " Four", " Five", " Six", " Seven", " Eight", " Nine"}; 


.... 

String text = _obtain your text string here_; 

for (int i=0; i<10; i++) { 
      text = text.replaceAll(String.valueOf(i), words[i]); 
} 

注意的是:在阵列已经每个字的名字前有空格。