记一次面试编程题

今天去北京某公司面试一个Android的sdk开发工程师,到达公司后直接商家根据需求完成相应的编码工作,20分钟写不出来没有面试机会,结果不出意外的我没有完全写出来,被pass掉,内心虽然有些失落,但是一想,毕竟这个岗位薪资是是相对可观的,没有那么容易。也就释然了,在回来的路上才想到了如何写出来这个,欲哭无泪啊,于是想起一句话:机会随时都有,就看你准备好了没。下面是我回到房子后重新写的那个面试题,编写完成,测试没毛病:

要求:
1. 采用io流读出res文件夹下worlds.file 的文本
2.对文本内容进行压缩输出压缩后的字符串,用Junit来测试
eg:我我我是一个个小小鸟 压缩后的字符串:我3是1一1个2小2鸟1

package main;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Compress {
    public String compress() {
        StringBuilder result = new StringBuilder();
        File file = new File("src/res/words.file");
        FileInputStream fis = null;
        String content = null;
        try {
            fis = new FileInputStream(file);
            /*
             * file.lenth()表示文本内容所占的字节数
             */
            // 创建一个与文本长度一直的字节缓冲区
            byte[] buf = new byte[(int) file.length()];
            System.out.println("文件的字节数:" + file.length());
            int i;// 一次读取的字节数
            while ((i = fis.read(buf)) != -1) {
                content = new String(buf);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();//关流
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        int count = content.length();// 该长度以字符为单位
        char c1 = content.charAt(0);// 获取第一个字符
        int sum = 1;// 重复的个数
        for (int j = 1; j < count; j++) {
            char c2 = content.charAt(j);
            if (c1 == c2) {
                sum++;
                continue;
            }
            result.append(c1).append(sum);
            sum = 1;
            c1 = c2;

        }
        result.append(c1).append(sum);// 将最后一个添加上
        System.out.println(result.toString());
        return result.toString();
    }

}

测试代码如下:

package main;

import static org.junit.Assert.*;

import java.io.IOException;

import org.junit.Test;

public class CompressTest {

    @Test
    public void test() throws Exception {
        Compress compress = new Compress();
        try {
            String reString = compress.compress();
            if (!reString.equals("我3哦1我1是1一1个1小2鸟2a3b3c3")) {
                throw new Exception("对不起,测试错误");
            } else {
                System.out.println("恭喜您,通过上机测试");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

worlds.file的文本内容:我我我哦我是一个小小鸟鸟aaabbbccc

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值