从文件中读取一行且不带空格的字符串
1.问题引出
在做一道题的时候,需要从文件中读取相关信息,一行是一个对应关系,需要使用Map存入,但是文件中有许多空格,读取文件时将空格也读取进来了,就灰常烦躁,以下是文件:
2.解决问题
思路1:使用字节流(FileInputStream)读取,会发现将空格也读取进来了,就很麻烦
思路2:使用字符流(FileReader)读取,确实没有了空格,但是一次只能读一个字符,不能读取一行,不能满足需求
思路3:突然发现,BufferReader中有一个方法:readLine(),可以读取一行的字符串。美滋滋,终于找到了想要的
@Test
public void test() throws Exception{
//使用BufferReader
BufferedReader bf=new BufferedReader(new FileReader("C:\\Users\\DRL\\Desktop\\test.txt"));
//用来接收读取每一行的字符串
String s=null;
//将字符串中特定的字符装进Map中
HashMap<Character,Character> hashMap=new HashMap<>();
//读取文件中的每一行
while ((s=bf.readLine())!=null){
hashMap.put(s.charAt(2),s.charAt(0));
}
//遍历map,使用java8新特性+lambda表达式
hashMap.forEach((k,v)-> System.out.println(k+v));
}
3.要解决的问题
上面说了,这个需求是为了解决一道问题,这个问题就是2020年蓝桥杯B组java第一道题,如下
3.1 问题描述
题中需要解密的字符串为:EaFnjISplhFviDhwFbEjRjfIBBkRyY
最终解密后的字符串为:YeRikGSunlRzgDlvRwYkXkrGWWhXaA
3.2 代码
public static void main(String[] args) {
//需要解密的字符串
String password="EaFnjISplhFviDhwFbEjRjfIBBkRyY";
//解密后的字符串,使用拼接的方式拼接而成
StringBuilder newPassword=new StringBuilder();
//将所有字母对应的关系存入Map中
HashMap<Character,Character> hashMap=new HashMap<>();
String content=null;
try {
BufferedReader bf=new BufferedReader(new FileReader("C:\\Users\\DRL\\Desktop\\test.txt"));
while ((content=bf.readLine())!=null){
//将所有字母对应的关系存入Map中
//注意:题目给的是加密后的,让求加密之前的密码,那么的map也需要与之对应
hashMap.put(content.charAt(2),content.charAt(0));
}
} catch (IOException e) {
e.printStackTrace();
}
//读取密码,进行解密
for (int i=0;i<password.length();i++){
//通过密码的每一位获取到其对应的解密字符
newPassword.append(hashMap.get(password.charAt(i)));
}
System.out.println(newPassword);
}