双百求教.请问如何处理下列文本放到hashmap中?

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:27:56
+ pk_busiregister CHAR(20) 业务对象注册主表主键 abc
+ busicode VARCHAR(30) 业务对象编码 efb

我的文本文件里面全是像上面这样一行行的数据.
键位于+号之后 值就是那段中文
我需要以阅读这个文本文件,然后以pk_busiregister为值,以 "业务对象注册主表主键 "中文为值放到一个hashmap中使用.
下面是我写的代码
package com.hongqishi.regx;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReadDictionary {

public static void main(String[] args) {
try {
// 构建文件
File file = new File("D:\\demo.txt");
// 构建读入流
BufferedReader reader = new BufferedReader(new FileReader(file));
// 声明临时行
String line;
Pattern itemkey = Pattern.compile("????");// 这个正则表达式如何 写
Pattern chinese = Pattern.compile("????");// 这个正则表达式如何 写
HashMap hm = new

首先确认D:\\demo.txt文件的字符编码,确认其为GBK编码
方法:打开D:\\demo.txt文件,文件-->另存为,看一下编码是否停在ANSI上

然后改写代码:
try {
File file = new File("D:\\demo.txt");
//修改输入流,在中间加一个转换流,可以确定读到的字符串的编码类型
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "gbk");
BufferedReader br = new BufferedReader(isr);
String line;
//key的正则表达式第一组表示以”+“和空格开头,第二组是key的字符串,由数字、字母和下划线组成
Pattern itemkey = Pattern.compile("(^[\\+][\\s]+)([\\S\\d_]+)");
//value的正则表达式表示字符的GBK编码范围从\u4e00到\u9fa5,即全部中文字符
Pattern chinese = Pattern.compile("[\u4e00-\u9fa5]+");
HashMap<String, String> hm = new HashMap<String, String>();
Matcher itemkeyMatcher;
Matcher chineseMatcher;
while ((line = br.readLine()) != null) {
itemkeyMatcher = itemkey.matcher(line);
chineseMatcher =