Получение многострочного ввода и объединение его в одну строку для работы в консольном приложении Java - PullRequest
0 голосов
/ 27 марта 2019

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

System.out.println("Enter a string: ");

StringBuilder sb1 = new StringBuilder();
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
    System.out.println(scanner.nextLine());
    // String line = scanner.nextLine();
    // sb1.append(line);
}

// System.out.println(sb1.toString());

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Я предполагаю, что вы хотите новую строку после каждого ввода, поэтому после

sb1.append(line);

добавить

sb1.append(System.getProperty("line.separator"));

Редактировать: (потому что я не знаю, как разместить код в комментариях) В основном, он будет продолжать запрашивать ввод, пока пользователь не введет «exit», после чего он прервет цикл while и распечатает строку. Вы можете добавлять запятые или пробелы для их разделения после добавления строки.

Я не уверен, что ваша первоначальная проблема была в том, что вы не прерывали цикл или потому, что вы дважды набрали nextLine в распечатке и присвоили line

    public static void main(String[] args) {
        System.out.println("Enter a string: ");
        StringBuilder sb = new StringBuilder();
        try (Scanner scanner = new Scanner(System.in)) {
            String input;
            while (!(input = scanner.nextLine()).equals("exit")) {
                sb.append(input);
            }
        }
        System.out.println(sb.toString());
    }
0 голосов
/ 27 марта 2019

Ниже приведен файл pom.xml для справки:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                        http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>json_example</groupId>
  <artifactId>json_example</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.1.4</version>
    </dependency>
  </dependencies>
</project>

Затем добавьте зависимые от maven файлы jar в ваш путь к классам.

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;

public static void main(String[] args) {
    System.out.println("Enter a valid JSON string: ");

    try (// Create JsonReader from Json.
        JsonReader reader = Json.createReader(System.in)) {
        // Get the JsonObject structure from JsonReader.
        JsonObject jsonObj = reader.readObject();
        System.out.println(jsonObj.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }

}
0 голосов
/ 27 марта 2019

Вы можете попробовать это.

private static String readFile(String pathname) throws IOException {

 File file = new File(pathname);
    StringBuilder fileContents = new StringBuilder((int)file.length());        

    try (Scanner scanner = new Scanner(file)) {
        while(scanner.hasNextLine()) {
            fileContents.append(scanner.nextLine() );
        }
        return fileContents.toString();
    }
}

Этот код будет читать все строки из текстового файла и выдавать нас как одну строку в качестве возвращаемого объекта.

...