2016-11-14 3 views
1

Эта программа вводит «привет, мое имя - боб» и выплевывает его назад. Мне действительно нужна помощь в том, что программа читает в текстовом файле и выплескивает текстовый файл назад. Заранее спасибо!Проблема с рекурсивным и текстовым файлом

public class Recursion 
{ 
public static void main(String[] args) throws FileNotFoundException { 
System.out.println(printBackwards("hello my name is bob")); 
} 



public static String printBackwards(String s){ 
if(s.length() <= 1) 
     return s; 
    else 
     return printBackwards(s.substring(1,s.length()))+s.charAt(0); 
    } 
} 
+0

Я полагаю, что это домашнее задание, но это одна линия решение (не используя рекурсию) Считывает «input.txt»: 'System.out.println (новый StringBuilder (новый Сканер (новый файл ("input.txt")). UseDelimiter ("\\ Z ") .next()). reverse());' –

+1

Возможный дубликат [Что лучше всего рекурсивно изменить строку в Java?] (http://stackoverflow.com/questions/859562/whats-the-best -way-to-recursively-reverse-a-string-in-java) – Hypino

+0

@ Hypino, если вы посмотрите код, отправленный OP, вы должны увидеть, что он уже реализовал «метод обратной строки». Он просто спрашивает, как читать/напишите ввод/вывод из/в файл. – user6904265

ответ

-1

Это должно работать так, как вы ожидаете. Я полагаю, что в filename_in.txt у вас есть только одна строка, в противном случае вы должны цикла (я позволю вам сделать это как упражнение):

public static void main(String[] args){ 
     Scanner in = null; 
     PrintWriter writer = null; 
     try{ 
      in = new Scanner(new FileReader("filename_in.txt")); 
      writer = new PrintWriter("filename_out.txt"); 
      writer.println(printBackwards(in.nextLine())); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
      in.close(); 
      writer.close(); 
     } 
    } 
+0

@downvoter .. могу я спросить вас, почему вы сделали downvote? благодаря! – user6904265

-1

Используйте этот код, чтобы получить строку, которую вы хотите отменить из текста файл:

try{ 
    String myString; 
    BufferedReader input = new BufferedReader(new FileReader("Filepath.txt"); 
    while((myString = input.readLine()) != null){} 
} 
catch(FileNotFoundException ex){ 
    //Error Handler Here 
} 
catch(IOException ex){ 
    //Error Handler Here 
} finally { 
    try{ 
     if(br != null) br.close(); 
    } 
    catch(IOException ex){ 
     ex.printStackTrace(); 
    } 
} 

не забудьте импортировать:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.FileNotFoundException 
0

на основе комментариев по этому вопросу, это будет читать файл с именем input.txt и сохранить его в новый файл вывода. T xt, используя ваш метод для реверсирования String.

Все строки в input.txt сначала добавляются к List.

List затем повторяется в обратном порядке от последнего элемента, а с каждой итерацией - обратный String, записанный на output.txt.

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.ListIterator; 
import java.util.Scanner; 

public class Example { 

    public static void main(String[] args) throws IOException {  
     try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { 
      Scanner scanner = new Scanner(new File("input.txt")); 
      List<String> fileContents = new ArrayList<>(); 
      while (scanner.hasNextLine()) { 
       fileContents.add(scanner.nextLine()); 
      } 
      ListIterator<String> it = fileContents.listIterator(fileContents.size()); 
      while (it.hasPrevious()) { 
       writer.write(printBackwards(it.previous())); 
       writer.newLine(); 
      } 
     } 
    } 

    public static String printBackwards(String s) { 
     if (s.length() <= 1) { 
      return s; 
     } else { 
      return printBackwards(s.substring(1, s.length())) + s.charAt(0); 
     } 
    } 
} 

Если же вы просто хотите, чтобы отобразить его на стандартный вывод, вы можете настроить его на следующее:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.ListIterator; 
import java.util.Scanner; 

public class Example { 

    public static void main(String[] args) throws FileNotFoundException { 
     Scanner scanner = new Scanner(new File("input.txt")); 
     List<String> fileContents = new ArrayList<>(); 
     while (scanner.hasNextLine()) { 
      fileContents.add(scanner.nextLine()); 
     } 
     ListIterator<String> it = fileContents.listIterator(fileContents.size()); 
     while (it.hasPrevious()) { 
      System.out.println(printBackwards(it.previous())); 
     } 
    } 

    public static String printBackwards(String s) { 
     if (s.length() <= 1) { 
      return s; 
     } else { 
      return printBackwards(s.substring(1, s.length())) + s.charAt(0); 
     } 
    } 
} 

Или, как я уже говорил в мой комментарий выше, вы можете просто прочитать всю файл на одном дыхании и повернуть его вспять:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class Example { 

    public static void main(String[] args) throws FileNotFoundException { 
     System.out.println(printBackwards(new Scanner(new File("file.txt")).useDelimiter("\\Z").next())); 
    } 

    public static String printBackwards(String s) { 
     if (s.length() <= 1) { 
      return s; 
     } else { 
      return printBackwards(s.substring(1, s.length())) + s.charAt(0); 
     } 
    } 
} 
Смежные вопросы