您的位置:首页 > Web前端

奇虎360——最后一个字符(利用BufferedReader输入数据)

2016-07-26 15:39 417 查看




题目描述

你要的最后一个字符就在下面这个字符串里,这个字符是下面整个字符串中第一个只出现一次的字符。(比如,串是abaccdeff,那么正确字符就是b了)

题目要求

输入文件体积较大,请使用一些快速的输入输出手段,不推荐使用cin/cout,对Java并不推荐使用Scanner直接读写。 

输入描述:
第一行,一个正整数T(T≤20)  ,表示输入数据组数。
之后T行,每行一个字符串S。( 1≤S  的长度≤1000000   ,保证字符串中出现的字符的ASCII码在[0x21,0x7F)范围内,即均为可显示的非空白符,同时保证一定有解)

输出描述:
一共T 行,每行一个字符C ,表示所给的相应字符串中第一个只出现一次的字符。

输入例子:
2
abaccdeff
testonline

输出例子:
b
s


分析:需要注意的就是利用BufferedReader从控制台输入数据的方法。


BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

System.in方法的描述:

in

public static final InputStream
in  可以看出是字节流

BufferedReader要处理的是字符流,所以要利用InputStreamReader()进行字节流到字符流的转换。

BufferedReader读取的方式readLine()的描述:

readLine

public String readLine()
throws IOException

读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。

返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 抛出:
IOException
- 如果发生 I/O 错误
读取的是字符串类型,所以还要Integer.parseInt(Sting s)进行类型的转换。利用while((s=in.readLine())!=null)判断是否读取到文件流的末尾,当读到文件流末尾的时候返回null给s。


import java.util.*;
import java.io.*;//文件流引入io包,减少笔试编译次数
public class Main{
public static void main(String[] args)throws Exception
{
//控制台输入数据BufferedReader
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s="";
while((s=in.readLine())!=null)//readLine()读取返回字符串,若读取到文件末尾,返回null。
{
int count=Integer.parseInt(s);
for(int i=0;i<count;i++)
{
String ss=in.readLine();
char c=firstChar(ss);
System.out.println(""+c);
}
}
in.close();
}
//字符串中找到第一个只出现一次字符的例程
public static char firstChar(String s)
{
HashMap<Character,Integer> map=new HashMap();
for(int i=0;i<s.length();i++)
{
if(!map.containsKey(s.charAt(i)))
{
map.put(s.charAt(i),1);
}else
{
map.put(s.charAt(i),map.get(s.charAt(i))+1);
}
}
char c=s.charAt(0);
for(int i=0;i<s.length();i++)
{
if(map.get(s.charAt(i)) == 1)
{
c=s.charAt(i);
break;
}
}
return c;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: