Ответ 1
Этот подход работает, но я не понимаю, может ли кто-нибудь объяснить, как это работает.
String s = sc.next();
s += sc.nextLine();
Я пишу программу, которая позволяет пользователю вводить свои данные, а затем выводит ее. Его 3/4 правильно, но когда он приходит к выходу адреса, он только печатает слово, говорящий только "Архиепископ" с "Архиепископской улицы". Как это исправить?
import java.util.*;
class MyStudentDetails{
public static void main (String args[]){
Scanner s = new Scanner(System.in);
System.out.println("Enter Your Name: ");
String name = s.next();
System.out.println("Enter Your Age: ");
int age = s.nextInt();
System.out.println("Enter Your E-mail: ");
String email = s.next();
System.out.println("Enter Your Address: ");
String address = s.next();
System.out.println("Name: "+name);
System.out.println("Age: "+age);
System.out.println("E-mail: "+email);
System.out.println("Address: "+address);
}
}
Этот подход работает, но я не понимаю, может ли кто-нибудь объяснить, как это работает.
String s = sc.next();
s += sc.nextLine();
Инициализируйте сканер таким образом, чтобы он ограничивал ввод с использованием нового символа строки.
Scanner sc = new Scanner(System.in).useDelimiter("\\n");
Подробнее о JavaDoc
Используйте sc.next(), чтобы получить всю строку в строке
Я бы использовал Scanner#nextLine
, противоположный next
для вашего атрибута address
.
Этот метод возвращает остальную часть текущей строки, за исключением любого разделителя строк в конце.
Так как это возвращает всю строку, разделенную разделителем строк, это позволит пользователю вводить любой адрес без каких-либо ограничений.
Разделитель по умолчанию для Scanner - это пробел. Отметьте javadoc, чтобы изменить это.
String s="Hi";
String s1="";
//For Reading Line by hasNext() of scanner
while(scan.hasNext()){
s1 = scan.nextLine();
}
System.out.println(s+s1);
/*This Worked Fine for me for reading Entire Line using Scanner*/
Вместо прямого использования System.in
и System.out
используйте класс Console
- он позволяет отображать подсказку и читать целую строку (тем самым фиксируя вашу проблему) ввода в один вызов:
String address = System.console().readLine("Enter your Address: ");
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s="";
while(scan.hasNext())
{
s=scan.nextLine();
}
System.out.println("String: " +s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
next()
может читать ввод только до пробела. Он не может прочитать два слова через пробел. Кроме того, next()
помещает курсор в ту же строку после прочтения ввода.
nextLine()
читает ввод, включая пробел между словами (то есть читает до конца строки \n
). Как только ввод прочитан, nextLine()
курсор в следующую строку.
для чтения всей строки вы можете использовать nextLine()
Мы можем легко сделать с помощью scan.nextLine. Он будет читать остальную часть ввода до конца. Затем назначьте его переменной. Цельное предложение можно распечатать легко , Вот пример вашего лучшего понимания.
String s = "HackerRank ";
Scanner scan = new Scanner(System.in);
String s2;
scan.nextLine(); // read the rest of the line of input (newline character after the double token).
s2 = scan.nextLine();
/* Concatenate and print the String variables on a new line integer variables on a new line;
System.out.println(s + s2);
scan.close();
} }
Я пробовал следующий код, но это не останавливается, так как нет условия прерывания, поэтому он всегда ждет ввода, возможно, вы могли бы добавить условие для разрыва
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s="";
while(scan.hasNext())
{
s=scan.nextLine();
}
System.out.println("String: " +s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
Чтобы получить весь адрес, добавьте
s.nextLine();//read the rest of the line as input
перед
System.out.println("Enter Your Address: ");
String address = s.next();
Вы должны попробовать этот код:
scan.nextLine();
String address = s.nextLine();
Это полностью работает.
Я установил разделитель токенов как шаблон новой строки, прочитал следующий токен, а затем вернул разделитель к тому, что было.
public static String readLine(Scanner scanner) {
Pattern oldDelimiter = scanner.delimiter();
scanner.useDelimiter("\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029]");
String r = scanner.next();
scanner.useDelimiter(oldDelimiter);
return r;
}
Ниже приведен пример кода для чтения строки в стандартном входе с использованием класса Java Scanner.
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println(s);
scan.close();
}
}
Input:
Hello World
Вывод:
Hello World
"он только печатает слово, говорящий только" Архиепископ "с" Архиепископской улицы "
Он печатает только слово, потому что функции сканера, такие как next(), nextInt() и т.д., читают только токены во времени. Таким образом, эта функция читает и возвращает следующий токен.
For example if you have: x y z
s.next() will return x
s.nextLine() y z
Возвращаясь к вашему коду, если вы хотите прочитать всю строку "Архиепископская улица"
String address = s.next(); // s = "Archbishop"
Then address += s.nextLine(); // s = s + " Street"
ниже фрагмент кода должен делать то, что ищет yoiu:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
System.out.println(s);
scan.close();
}
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
s += scan.nextLine();
System.out.println("String: " + s);
}
}
java.util.Scanner; util - упаковка, сканер - класс
next()
читает строку перед пробелом. он не может ничего читать после того, как получает первый пробел.nextLine()
читает всю строку. Читайте до конца строки или "/n". Примечание: не следующая строка(Пример)
Моя жизненная миссия - не просто выжить, но и процветать;
и делать это с некоторой страстью, некоторым состраданием, некоторым юмором.
(Выход)
мой
Моя жизненная миссия - не просто выжить, но и процветать;
Трюки:
Если вы хотите прочитать следующую строку, проверьте, has
Java метод.
while (scanner.hasNext()) {
scan.next();
}
while (scanner.hasNext()) {
scan.nextLine();
}
У меня был тот же вопрос. Это должно сработать для вас:
s.nextLine();
Вы также можете использовать
String address = s.nextLine();
address = s.nextLine();
Используйте nextLine()
вместо next()
для принятия предложения в качестве строкового ввода.
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Вы можете сделать это:
class MyStudentDetails{
public static void main (String args[]){
Scanner s = new Scanner(System.in);
System.out.println("Enter Your Name: ");
String name = s.nextLine();
System.out.println("Enter Your Age: ");
String age = s.nextLine();
System.out.println("Enter Your E-mail: ");
String email = s.nextLine();
System.out.println("Enter Your Address: ");
String address = s.nextLine();
System.out.println("Name: "+name);
System.out.println("Age: "+age);
System.out.println("E-mail: "+email);
System.out.println("Address: "+address);
}
}