【求助】新人学JAVA~求个指点
import java.io.*;public class StringBuffertoString {
public static void main(String[] args) {
char ch;
try{
System.out.println("Enther Width!");
int length=System.in.read();
StringBuffer strb=new StringBuffer(length);
while((ch=(char)System.in.read())!='\n'){
strb.append(ch);
}
String str=strb.toString();
System.out.println(str);
}
catch(IOException e){}
}
}
为什么每输入的字符,输出都把第一个吃掉了,而且明明有两处是要输入的呀。怎么只有让我输入一次。希望大神能讲解下system.in.read()的原理之类的吧 --------------------编程问答-------------------- 有一点可以说明那就是 当你在控制台输入完成后你会按下ENTER 键 而system.in.read()将这个enter键也当成了一次输入 故你只输入了一次 --------------------编程问答-------------------- int length = System.in.read();
System.out.println(length);
System.out.println(System.in.read());
System.out.println(System.in.read());
你输入1 然后运行就会发现输出的结果是49
13
10
对应着1
\r \n(因为回车包含\r\n) --------------------编程问答-------------------- 那我该怎么实现输入多次呢?第一个字符被吃掉是怎么回事? --------------------编程问答-------------------- 你要是想问楼上问题的话应该先引用,这样楼上才会收到你的问题,我以前也和你一样 以为别人不回复我 原来是人家都不知道我问了他。
你不明白为什么第一个字符被吃掉是怎么回事? 是因为你没理解下面的
StringBuffer
public StringBuffer(int capacity)构造一个不带字符,但具有指定初始容量的字符串缓冲区。
参数:
capacity - 初始容量。
你输入的第一个字母被读入之后,作为了设定StringBuffer的初始容量了,还以上面 1hello为例
第一次你读入1 所以strb的初始容量为49 进入while循环的第一个字母是h 首次添加到strb中的也是h
所以第一个 1 就没添加到strb中 也就解答了你的问题
--------------------编程问答-------------------- 你可以用缓冲流来直接读取一行文字这样是不会被覆盖掉的。
File file = new File("fileName");
BufferdReader bf= new BufferedReader
(new java.io.FileReader(file));
String s=bf.readLine();
while(s!=null){
s= s+s;
} --------------------编程问答--------------------
还有 你在回车键 前面输入多少个字母 System.in.read() 就会读多少次 例如你输入hello(此时未按回车键)System.in.read()就会读5次 你要是想多次输入的话你可以在你的while循环外面再加一个循环,比如你想输入两次
int i=0;--------------------编程问答-------------------- 哦看错了是写数据哈。那就用BufferedWriter
while(i<2)
{
int length=System.in.read();
StringBuffer strb=new StringBuffer(length);
while((ch=(char)System.in.read())!='\n'){
strb.append(ch);
}
String str=strb.toString();
System.out.println(str);
i++;
}
--------------------编程问答--------------------
补充:Java , Eclipse