4

我如何通过课程StringBuilder从用户那里获得信息?Scanner或任何其他课程?我知道我们可以得到一个字符串,然后把它放在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);
    }
}

或通过使用append(). 但无论如何可以StringBuilder直接从用户那里获得?

4

4 回答 4

5

您误解了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);
        }
    }

当然,和你发的一样!

于 2013-08-06T18:48:45.383 回答
3

您无法StringBuilder从标准输入中获取对象,但您可以输出给用户enter the strings (type 'exit' to exit):并制定自己的公式。

循环直到他们输入'exit',每次你获取字符串时,你都可以这样做myStringBuilder.add(theirInput)
(这当然是伪代码)

于 2013-08-06T18:40:30.893 回答
0

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

Scanner scan = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String text=null;
while ((text = scan.nextLine ()) != null)
{
      sb.append(text);
}
于 2013-08-06T18:50:17.527 回答
0

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

while ( (line = scanner.nextLine()) != null)
    dataSoFar += line;

每次迭代都会导致被引用的旧 String 对象dataSoFar连接成一个新String的 with lineStringBuilder只是读取line并将其字符放在内部缓冲区的末尾。需要时,它会调整缓冲区的大小,这在读取大量字符数据时需要更少的 GC 工作。

Java 的 API 不会返回一个字符串生成器,因为它在这里没有意义。

于 2013-08-06T18:41:02.320 回答