#java #console-application #stringbuilder
#java #консольное приложение #stringbuilder
Вопрос:
Конечная цель — взять многострочный пользовательский ввод и объединить все это в одну строку, которую можно использовать позже в моем коде. Когда я использую приведенный ниже код, каждая отдельная строка печатается идеально в качестве выходных данных. Однако, когда я использую закомментированный код, мой конечный результат неверен.
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());
Ответ №1:
Я предполагаю, что вы хотите новую строку после каждого ввода, поэтому после
sb1.append(line);
Добавить
sb1.append(System.getProperty("line.separator"));
Редактировать: (потому что я не знаю, как размещать код в комментариях) В основном это будет продолжать запрашивать ввод до тех пор, пока пользователь не введет «exit», который затем выйдет из цикла while и распечатает строку. Вы можете добавить запятые или пробелы, чтобы разделить их после добавления строки.
Я не уверен, была ли ваша первоначальная проблема в том, что вы не выходили из цикла, или потому, что вы дважды вызывали nextLine
print и назначали его 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());
}
Комментарии:
1. Моя цель — принять все строки и объединить их в одну строку. Которое будет использоваться в другом месте моего кода.
2. @BlakeRivell Хм, то, что я опубликовал с тем, что вы объединили, должно дать вам строку с вводом новую строку после каждого ввода, который, насколько я понимаю, является тем, что вы хотите?
3. Я не хочу сохранять строки. Я хочу, чтобы это была однострочная строка.
4. @BlakeRivell Ну, не совсем уверен, какой формат вы хотите, но посмотрите на основной пост еще раз
5. ваш ответ — это именно то, что я пытался в своем посте. Если вы запустите код, он даже не примет пользовательский ввод, он просто отключится. С какой проблемой я сталкиваюсь. Возможно, это потому, что я использую Java 12… Я не знаю.
Ответ №2:
Вы можете попробовать это.
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();
}
}
Этот код будет считывать все строки из текстового файла и выдавать нам в виде одной строки в качестве возвращаемого объекта.
Комментарии:
1. Я не читаю здесь из файла. Я читаю пользовательский ввод в консольном приложении.
Ответ №3:
Ниже приводится 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 в свой classpath.
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();
}
}
Комментарии:
1. Я запускаю debug в IntelliJ и вставляю многострочную строку json, затем нажимаю enter, и независимо от того, сколько раз нажимаю enter, ничего не происходит. Но я попробую ваш код завтра.
2. Возможно, это не очень хорошая идея, чтобы пользователь вставлял форматированный Json в консольное приложение, и я должен делать это по-другому, например, указывать на файл или что-то в этом роде. Но это должно быть возможно, верно? Моя конечная цель — передать введенный пользователем форматированный json в окончательный JsonParser parser = Json.createParser(новый StringReader(userJsonStr)); Перед передачей его сюда мне нужно удалить все пробелы и все разрывы строк. В противном случае анализатор выдаст ошибку.
3. Я думаю, что ввод Json в консольном приложении был бы просто для тестирования и отладки.