A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李中豪 黑马帝   /  2012-3-21 13:27  /  1772 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;

class  Readin
{
        public static void main(String[] args) throws IOException
        {
                InputStream in=System.in;
                StringBuilder sb=new StringBuilder();
                while(true)
                {
                        int ch=in.read();
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                String s=sb.toString();
                                if("over".equals(s))
                                        break;
                               
               
                                System.out.println(s);
                                sb.delete(0,sb.length());
                                                       
                       
                        }
                       
                        sb.append((char)ch);
                       
                                        }
               
        }
}

5 个回复

倒序浏览
String s=sb.toString();
      if("over".equals(s))//over不可能等于s,因为s为null
                      break;
回复 使用道具 举报
本帖最后由 马云 于 2012-3-21 14:18 编辑

import java.io.IOException;
import java.io.InputStream;


public class SplitDemo {

           public static void main(String[] args) throws IOException {
                InputStream in=System.in;
                StringBuilder sb=new StringBuilder();
                while(true){
                       
                        char ch=(char)in.read();
                        if(ch!='\r'&&ch!='\n')
                                sb.append(ch);
                        if(ch=='\r')
                                continue;
                        if(ch=='\n'){
                                String s=sb.toString();
                                if(s.equals("over"))
                                {
                                        sb.delete(0, sb.length());
                                        break;
                                }
                                       
                                System.out.println(s);
                                sb.delete(0, sb.length());
                        }
                       
                        //System.out.println("append end:"+sb.toString());
                       
        }
}
}

原理随后献上啊

输入一个字符串
读一个字符
判断是不是\r或\n
如果是\r就下一次循环如果是\n就将sb变成字符串
并判断它是否为over如果是就跳出不是就输出
回复 使用道具 举报
LZ仔细观察下输出结果就能找到答案,有个规律就是第一行输入后,输出的是紧挨着输入行的,以后的每行输入,输出后都会有空行。
在看看你的代码。就很明了了, 你在if(ch=='\n')后,把sb清空了。但是这时候ch还是‘\n’,然后你把它加在sb的头部了,所以导致以后的每行输出都有空行,
两种解决办法:
1.把sb.append((char)ch);用else语句包围,

2.清空sb后,加一句continue跳出这次循环
回复 使用道具 举报
忘了写else了
import java.io.IOException;

import java.io.*;

class  Readin
{
        public static void main(String[] args) throws IOException
        {
                InputStream in=System.in;
                StringBuilder sb=new StringBuilder();
                while(true)
                {
                        int ch=in.read();
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                String s=sb.toString();
                                if("over".equals(s))
                                        break;                              
                                System.out.println(s);
                                sb.delete(0,sb.length());
                                                      
                       
                        }else
                       
                        sb.append((char)ch);
                       
                }
               
        }
}
回复 使用道具 举报
本帖最后由 谢明 于 2012-3-21 14:45 编辑

原因是  sb.append((char)ch);前没有加 else   因为没有加  所以  每次的  /r/n   
虽然判断了  但还会执行 sb.append((char)ch);
/n 还是被加入了  sb中   所以输出的时候你会发现   除第一次以外
每次的输出最前面 都加入了 一个换行的  
你运行的第一次  over是可以结束的  但是 以后的  over   就是   /nover  了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马