Java 如何从用户处获取StringBuilder

Java 如何从用户处获取StringBuilder,java,Java,如何通过Scanner类从用户处获取StringBuilder?? 或者其他课程? 我知道我们可以得到一个字符串,然后将其放入StringBuilder中,如下所示: import java.util.Scanner; public class Sade { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str;

如何通过
Scanner
类从用户处获取
StringBuilder
?? 或者其他课程? 我知道我们可以得到一个字符串,然后将其放入
StringBuilder
中,如下所示:

import java.util.Scanner;

public class Sade {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String str;

        str = scan.nextLine();
        StringBuilder strb  = new StringBuilder(str);
    }
}
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String text=null;
while ((text = scan.nextLine ()) != null)
{
      sb.append(text);
}
或者通过使用
append()

但是,是否可以直接从用户处获取
StringBuilder

您无法从标准输入中获取
StringBuilder
对象,但您可以向用户输出
输入字符串(键入“exit”退出):
并制定自己的规则

循环执行此操作,直到他们键入“exit”,每次获取字符串时,您都可以执行
myStringBuilder.add(theirInput)


(这当然是伪代码)

您误解了
StringBuilder
的目的。字符串连接需要创建新的
字符串
,这会导致不必要的垃圾收集
StringBuilder
通过将多个字符串的内容放入字符缓冲区,然后一次返回一个新字符串,将其追加到一起。这会导致大量垃圾收集:

while ( (line = scanner.nextLine()) != null)
    dataSoFar += line;
每次迭代都会导致
dataSoFar
引用的旧字符串对象与
line
连接成一个新的
String
StringBuilder
仅读取
,并将其字符放在内部缓冲区的末尾。当需要时,它将调整缓冲区的大小,这在读取大型字符数据源时需要更少的GC工作


Java的API不会返回字符串生成器,因为它在这里毫无意义。

您误解了StringBuilder类。StringBuilder的主要操作是append和insert方法,这些方法重载以接受任何类型的数据。每个都有效地将给定的数据转换为字符串,然后将该字符串的字符追加或插入到字符串生成器中。append方法总是在生成器的末尾添加这些字符;insert方法在指定点添加字符。 使用代码可以做的最好的事情是:-

import java.util.Scanner;

    public class sb {

        public static void main(String[] args) {

            Scanner scan = new Scanner(System.in);
            StringBuilder strb  = new StringBuilder(scan.nextLine());
            strb.append( scan.nextLine());
            System.out.println(strb);
        }
    }

当然,它和你贴的一样

如果您希望将用户输入的所有行读取到StringBuilder中,可以通过以下方式完成:

import java.util.Scanner;

public class Sade {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String str;

        str = scan.nextLine();
        StringBuilder strb  = new StringBuilder(str);
    }
}
Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String text=null;
while ((text = scan.nextLine ()) != null)
{
      sb.append(text);
}

否,用户只能向您传递字符串。它不能通过StringBuilder。为什么要使用StringBuilder?如果您对字符串使用
+
,它将在编译时转换为StringBuilder。请用户从易趣购买StringBuilder对象,并在System.in:))System.in中提供给您。in是一个输入流,StringBuilder是一个用于保存和连接字符串的对象。如果您开始搜索3个类并搜索键盘上的“自动生成源代码”键,您将无法成功完成任务。看看代码片段:5-15行,快速java课程:1-2周。否则,您需要询问每一行代码如何组合,因为StringBuilder更具动态性。它有一些方法(如insert)使其比字符串更具动态性。