当前位置:编程学习 > JAVA >>

【求助】新人学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) --------------------编程问答-------------------- 那我该怎么实现输入多次呢?第一个字符被吃掉是怎么回事? --------------------编程问答--------------------
引用 3 楼 renrenai35 的回复:
那我该怎么实现输入多次呢?第一个字符被吃掉是怎么回事?
 你要是想问楼上问题的话应该先引用,这样楼上才会收到你的问题,我以前也和你一样 以为别人不回复我 原来是人家都不知道我问了他。

你不明白为什么第一个字符被吃掉是怎么回事? 是因为你没理解下面的
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;

} --------------------编程问答--------------------
引用 3 楼 renrenai35 的回复:
那我该怎么实现输入多次呢?第一个字符被吃掉是怎么回事?

还有  你在回车键 前面输入多少个字母  System.in.read() 就会读多少次  例如你输入hello(此时未按回车键)System.in.read()就会读5次  你要是想多次输入的话你可以在你的while循环外面再加一个循环,比如你想输入两次
int i=0;
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++;
}
--------------------编程问答-------------------- 哦看错了是写数据哈。那就用BufferedWriter
--------------------编程问答--------------------
引用 7 楼 u010168807 的回复:
哦看错了是写数据哈。那就用BufferedWriter
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,