我正在使用BufferedReader进行输入。
String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
在这里,在程序的下一部分,我可能会操纵或更改上述String的字符,因此,由于字符串在Java中是不可变的,因此我可以将其转换为StringBuilder或charArray。我想避免将String转换为StringBuilder或charArray的O(n)转换。 有什么办法可以直接在charArray或StringBuilder中接受输入?
答案 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};