【问题标题】:how to modify string with scanner? [duplicate]如何用扫描仪修改字符串? [复制]
【发布时间】:2026-02-11 05:05:02
【问题描述】:

假设我已经有一个字符串

String abc = "Stack";

现在,我想使用扫描器类 only 修改这个字符串!因此,用户应该能够在控制台上看到现有字符串,然后他可以编辑该字符串。 我试过这个,但它只是替换了现有的字符串。

System.out.println("Edit the below string");
System.out.println(abc);
abc = scanner.nextLine();

我将如何实现它?

【问题讨论】:

  • 如果您阅读 String 类的文档,您首先会阅读的内容之一是 "Strings are constant; their values cannot be changed after they are created." - 所以没有什么可以编辑 String。您始终可以将变量分配给新字符串。
  • java 中的字符串是不可变的,而从 Scanner 读取的行也是一个字符串,因此是不可变的。因此,您只能在 Java 中将一个字符串替换为另一个字符串。对于用户而言,就您而言,控制台中打印的字符串一开始就无法编辑!
  • 如果我不能编辑字符串我可以使用 StringBuffer 或 StringBuilder。但这不是重点。我只想在控制台上编辑这个字符串。
  • 简单的答案 - 你无法实现它。您无法在控制台上编辑此字符串。
  • 使用StringBuffer,这是一个字符数组,本质上是可变的

标签: java string java.util.scanner


【解决方案1】:

问题是你不应该只使用一个字符串。您的问题是创建 StringBuffer 的原因。理想的解决方案:

StringBuffer buffer = new StringBuffer("Stack");
while (scanner.hasNextLine()){
    buffer.append(scanner.nextLine());
    System.out.println(buffer.toString());
}

String abc = buffer.toString(); //if you really need to save it to variable 'abc' for some reason.

如果您讨厌自己的计算机并且只能使用字符串,这是一个可怕的例子。

String abc = "Stack";
while (scanner.hasNextLine()){
    abc += scanner.nextLine();
    System.out.println(abc);
}

出于内存原因,以上是一个糟糕的解决方案。

希望对你有帮助

【讨论】:

  • '-1' 有什么原因吗?
  • 因为 getLine 在 Java 中甚至不存在。您显然甚至没有测试运行您的代码。你有这个从未声明过的“扫描仪”变量。即使您确实将其初始化为 Scanner 对象,此代码也不会像您声称的那样做。在这里发布之前测试运行您的代码。
  • 不知道我是怎么犯这个错误的,但是我改正了。希望对您有所帮助。