2013-05-04 3 views
0

Я пробовал в Интернете помощь с этим, но я не могу найти его, поэтому я прибегаю к публикации.Чтение фракций в txt-файле java

У меня есть текстовый файл, который отформатирован как этот

1/2 0 1/6 6/11 1/6 2/10

мне нужно прочитать каждый из этих раздельных фракций и ввода числитель и знаменатель в функции BigFraction (num, denom).

Я звоню читателю и вывожу его как строку. Затем я разбился на пробелы, чтобы получить отдельные дроби в виде строк введите их в мой вспомогательный метод, strToBF, , который разбивается на форвард-люк и вводит числитель и знаменатель.

, но он не работает, любая помощь будет принята с благодарностью

мой основной метод

  String file = fileToString(fileName); 
    file.replaceAll("(.*)\\/(.*)", "a"); 
    String[] splitFile = file.split(" "); 

    BigFraction conditionA = stringToBF(splitFile[0]); 
    BigFraction c1A = stringToBF(splitFile[1]); 
    BigFraction c2A = stringToBF(splitFile[2]); 
    ConditionalTwoCoinChannel CTCCA = new ConditionalTwoCoinChannel(conditionA, new TwoCoinChannel(c1A, c2A)); 

    BigFraction conditionB = stringToBF(splitFile[3]); 
    BigFraction c1B = stringToBF(splitFile[4]); 
    BigFraction c2B = stringToBF(splitFile[5]); 
    ConditionalTwoCoinChannel CTCCB = new ConditionalTwoCoinChannel(conditionB, new TwoCoinChannel(c1B, c2B)); 

    List<ConditionalTwoCoinChannel> outputList = new ArrayList<ConditionalTwoCoinChannel>(); 

    outputList.add(CTCCA); 
    outputList.add(CTCCB); 

    return outputList; 

и мои два вспомогательных методов

private static String fileToString(String file) 
     throws FileNotFoundException, IOException { 

     BufferedReader fileReader = new BufferedReader(new FileReader(file)); 
     StringBuilder sBuilder = new StringBuilder(); 
     String fileLine = fileReader.readLine(); 

     try { 
      while (fileLine != null) { 
       sBuilder.append(fileLine); 
       sBuilder.append(" "); 
       fileLine = fileReader.readLine(); 
      } 
     } catch (FileNotFoundException e1) { 
      throw new RuntimeException("file not found"); 
     } catch (IOException e2) { 
      throw new RuntimeException("Input Error"); 
     } 
     finally { 
      fileReader.close(); 
     } 


     return sBuilder.toString(); 




private static BigFraction stringToBF(String str){ 

      if (strToInt(str) == 0) { 
       return BigFraction.ZERO; 
      } 
      else { 
       String[] strSplit = str.split("(.*)a(.*)"); 
       int numerator = strToInt(strSplit[0]); 
       int denominator = strToInt(strSplit[1]); 
       return new BigFraction(numerator, denominator);    
      } 
     } 
+0

Можете ли вы представить свой полный код с классами, так что отладка может быть сделано. –

+0

как я могу загрузить все это? Полный код, который я могу сделать, но есть 9 файлов классов –

ответ

1

Это

String[] strSplit = str.split("(.*)a(.*)"); 

не может spli т «1/2»

попробовать

String[] strSplit = str.split("/"); 
+0

Я изменил его на это, и он все еще дает мне NumberFormatException с «1/2». Я также удалил функцию replaceall, чтобы он просто попытался разделить на/ –

+0

. Я думаю, что здесь он strToInt (str), попробуйте, если (str.equals («0»)) возвращает BigFraction.ZERO; вместо –

+0

omg, Евгений Дорофеев, у вас такая же жизнь. Спасибо большое –