Java中有没有一种方法可以直接在charArray中接受输入?

时间:2020-05-03 05:47:54

标签: java string input

我正在使用BufferedReader进行输入。

String s = new BufferedReader(new InputStreamReader(System.in)).readLine();

在这里,在程序的下一部分,我可能会操纵或更改上述String的字符,因此,由于字符串在Java中是不可变的,因此我可以将其转换为StringBuilder或charArray。我想避免将String转换为StringBuilder或charArray的O(n)转换。 有什么办法可以直接在charArray或StringBuilder中接受输入?

2 个答案:

答案 0 :(得分:2)

您知道有多少个字符,您可以像这样将整个流读入char数组:

char[] chars = new char[nosChars];
BufferedReader br = new BufferedReader(source);
int nosRead = br.read(chars, 0, nosChars);
// Then do another read to check that you have read everything ...

如果输入实际上是一个文件,并且文件编码是一种允许您从文件大小(以字节为单位)中计算字符数的编码,则可以使上述操作生效。

但是,如果您不知道nosChars是什么,或者没有高估可靠但合理的,那么您可以做的任何事情都会涉及额外的复制步骤,或者两次(以某种方式)越过流来确定char[]的大小。两者都是O(N)


但是我怀疑您会发现将输入读入char[]是一个坏主意。在char[](或环绕StringBuilder的{​​{1}}中)编辑数据,对于您插入或删除的每个字符...和{{1} }是整个输入文件的长度。对于许多编辑,从以char[]对象表示的行列表开始会更有效。

最后,您应该注意有关优化的标准建议。直到:

  • 您知道这是一个真正的性能问题
  • 您知道哪里性能问题
  • 您有一个很好的方法来衡量优化是否有效。

答案 1 :(得分:0)

尝试一下。告诉我它是否有效!

        Scanner sc = new Scanner(System.in);


        //Say you want store 5 letters
        char [] lettrs = new char[5];

        for (int i = 0; i < lettrs.length;i++){
            //This message will show until the loop finish
            System.out.println("Write one letter");
            //Taking input
            char c = sc.next().charAt(0);
            //storing input letter to array
            lettrs[i] = c;
        }

        //This for is to print the letters you stor in to the array
        for (int i = 0; i <lettrs.length ; i++) {
            System.out.println(lettrs[i]);
        }

具有BufferedReader和动态char数组

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Write a letter");
        char c = (char)br.read();
        char [] lettrs = {c};