2017-01-06 2 views
3

Я начинаю программировать. В настоящее время я изучаю, как конвертировать тексты из блокнота в массив по строкам. Экземпляр текста в блокноте,Как преобразовать строковый текст из блокнота в строку строки?

Я студент средней школы
Я люблю бананы и куриные
У меня есть 2 собаки и 3 кошки

и так далее ..

В этом случае массив [1] будет строкой «Я люблю банан и цыпленок». Строки в блокноте могут быть обновлены, и я хочу, чтобы массив был динамическим/гибким. Я попытался использовать сканер для идентификации каждой из строк и попытался перенести их в массив. Пожалуйста, обратитесь к моему коду:

import java.util.*; 
import java.io.*; 
import java.util.Scanner; 

class Test 
{ 
    public static void main(String[] args) 
     throws Exception 
    { 
     File file = new File("notepad.txt");  
     Scanner scanner = new Scanner(file); 
     String line; 
     int i = 0; 
     int j = 0; 

     while (scanner.hasNextLine()) { 
      i++; 
     } 

     String[] stringArray = new String[i]; 

     while (scanner.hasNextLine()) { 
      line = scanner.nextLine(); 
      stringArray[j] = line; 
      j++; 
     } 

     System.out.println(stringArray[2]); 

     scanner.close(); 
    } 
} 

Я не уверен, почему есть во время выполнения ошибки, и я попробовал другой подход, но до сих пор не дал результата, который я хочу.

+2

отправьте сообщение об ошибке – SteelToe

+0

Возможно, вы столкнулись с бесконечным циклом. Верный? – Mordechai

+0

'array [1]' должен быть двумерным, чтобы содержать «Я люблю бананов и курицу». В противном случае это будет просто пространство за «I», то есть второй символ. – user8

ответ

1

Вы просто можете сделать это путем создания ArrayList, а затем преобразовать его в String Array.

Вот пример кода, чтобы вы начали:

public static void main(String[] args) throws FileNotFoundException { 
    Scanner in = new Scanner(new File("notepad.txt")); 
    List<String> outputList = new ArrayList<>(); 

    String input = null; 
    while (in.hasNextLine() && null != (input = in.nextLine())) { 
     outputList.add(input); 
    } 

    String[] outputArray = new String[outputList.size()]; 
    outputArray = outputList.toArray(outputArray); 

    in.close(); 
} 
+4

Большое спасибо за код стартера. Это действительно решило мою проблему. Похоже, что моя проблема заключается в отсутствии понимания между массивом и списком. Благодарю. –

3

Первый цикл будет бесконечным, потому что вы проверяете, имеет ли сканер следующую строку, но никогда не продвигается вперед. Хотя с помощью Scanner прекрасно, похоже, много работы, и вы могли бы просто позволить NiO пакет Явы делать тяжелую работу за вас:

String[] lines = Files.lines(Paths.get("notepad.txt")).toArray(String[]::new); 
0

Поскольку вы хотите массив быть динамичным/гибким, я хотел бы предложить использовать список в таком случае. Один из способов сделать это -

List<String> fileLines = Files.readAllLines(Paths.get("notepad.txt")); 
Смежные вопросы