Чтение строки с новыми строками из консоли Java
Я хочу прочитать эту строку (из консоли, а не из файла), например:
one two three
four five six
seven eight nine
Поэтому я хочу прочитать его в каждой строке и поместить каждую строку в массив. Как я могу это прочитать? Потому что, если я использую сканер, я могу прочитать только одну строку или одно слово (следующая строка или следующая).
Я имею в виду, например, читать: one two trhee \n four five six \n seven eight nine...
3 ответа
Вы должны сделать сами! Вот пример сравнения:
public class ReadString {
public static void main (String[] args) {
// prompt the user to enter their name
System.out.print("Enter your name: ");
// open up standard input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String userName = null;
// read the username from the command-line; need to use try/catch with the
// readLine() method
try {
userName = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error trying to read your name!");
System.exit(1);
}
System.out.println("Thanks for the name, " + userName);
}
} // end of ReadString class
Чтобы ответить на вопрос, уточненный в комментарии к первому ответу:
Вы должны вызывать метод nextLine() Сканера один раз для каждой строки, которую вы хотите прочитать. Это можно сделать с помощью цикла. Проблема, с которой вы неизбежно столкнетесь, такова: "Как узнать, каким должен быть мой массив результатов?" Ответ в том, что вы не можете знать, не указали ли вы это в самом вводе. Вы можете изменить спецификацию ввода ваших программ так, чтобы количество строк читалось следующим образом:
3
One Two Three
Four Five
Six Seven Eight
И тогда вы можете прочитать вход с этим:
Scanner s = new Scanner(System.in);
int numberOfLinesToRead = new Integer(s.nextLine());
String[] result = new String[numberOfLinesToRead];
String line = "";
for(int i = 0; i < numberOfLinesToRead; i++) { // this loop will be run 3 times, as specified in the first line of input
result[i] = s.nextLine(); // each line of the input will be placed into the array.
}
В качестве альтернативы вы можете использовать более сложную структуру данных, называемую ArrayList. ArrayList не имеет заданной длины при его создании; вы можете просто добавлять информацию к ней по мере необходимости, что делает ее идеальной для чтения ввода, когда вы не знаете, сколько нужно прочитать. Например, если мы использовали исходный пример ввода:
one two trhee
four five six
seven eight nine
Вы можете прочитать ввод с помощью следующего кода:
Scanner s = new Scanner(System.in);
ArrayList<String> result = new ArrayList<String>();
String line = "";
while((line = s.nextLine()) != null) {
result.add(line);
}
Таким образом, вместо того, чтобы создавать массив фиксированной длины, мы можем просто.add() каждую строку в ArrayList, когда мы сталкиваемся с ней во входных данных. Я рекомендую вам прочитать больше о ArrayLists, прежде чем пытаться их использовать.
tl; dr: Вы вызываете next() или nextLine() для каждой строки, которую хотите прочитать, используя цикл.
Больше информации о циклах: Java Loops
Посмотрите на этот код:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class SearchInputText {
public static void main(String[] args) {
SearchInputText sit = new SearchInputText();
try {
System.out.println("test");
sit.searchFromRecord("input.txt");
System.out.println("test2");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void searchFromRecord(String recordName) throws IOException {
File file = new File(recordName);
Scanner scanner = new Scanner(file);
StringBuilder textFromFile = new StringBuilder();
while (scanner.hasNext()) {
textFromFile.append(scanner.next());
}
scanner.close();
// read input from console, compare the strings and print the result
String word = "";
Scanner scanner2 = new Scanner(System.in);
while (((word = scanner2.nextLine()) != null)
&& !word.equalsIgnoreCase("quit")) {
if (textFromFile.toString().contains(word)) {
System.out.println("The word is on the text file");
} else {
System.out.println("The word " + word
+ " is not on the text file");
}
}
scanner2.close();
}
}