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

+pk_busiregisterCHAR(20)业务对象注册主表主键abc+busicodeVARCHAR(30)业务对象编码efb我的文本文件里面全是像上面这样一行行的... + 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 HashMap();
Matcher itemkeyMatcher;
Matcher chineseMatcher;
while ((line = reader.readLine()) != null) {
itemkeyMatcher = itemkey.matcher(line);
chineseMatcher = chinese.matcher(line);
if (itemkeyMatcher.find() && chineseMatcher.find()) {
hm.put(itemkeyMatcher.group(), chineseMatcher.group());
}
}
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}

}

请问这个正则表达式如何写?
PS Pattern a = Pattern.compile("^[\u4e00-\u9fa5] $");
这是正确的匹配中文的写法吗?我这不行,是不是因为我是英文的eclipse?
我的eclipse的确默认编码是gbk.
我原来测试的是把中文直接写在代码里是不能匹配.是不是GBK不行呀?
展开
 我来答
弑神之风
2009-08-27 · TA获得超过306个赞
知道小有建树答主
回答量:78
采纳率:0%
帮助的人:118万
展开全部
首先确认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 = chinese.matcher(line);
if(itemkeyMatcher.find() && chineseMatcher.find()) {
hm.put(itemkeyMatcher.group(2), chineseMatcher.group());
}
}
System.out.println(hm);
br.close();
} catch (Exception ex) {
ex.printStackTrace();
}

PS:尽量用GBK编码,能够实现。utf-8的汉字编码比较难用正则表达式表示。而且跟IDE编码关系不大。
百度网友aa6ca21
2009-08-25 · TA获得超过511个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:290万
展开全部
lz没必用正则,简单写写那段while里的代码,希望对你有点启发:

String[] elements = line.split("\\s+"); //用连续或单个空白字符分割line
String value = elemetns[1];//获得pk_busiregister值
String key = elements[3]; //获得key
hm.put(key, value); //hm是你的map对象

Good luck!:)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pujia12345
2009-08-28 · TA获得超过3680个赞
知道大有可为答主
回答量:3456
采纳率:0%
帮助的人:2977万
展开全部
你的需求是:
pk_busiregister->CHAR(20) 业务对象注册主表主键 abc

还是
pk_busiregisterCHAR(20)->业务对象注册主表主键 abc
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weizengyi
2009-08-25 · TA获得超过103个赞
知道小有建树答主
回答量:230
采纳率:0%
帮助的人:181万
展开全部
写入文件:
public static void main(String[] args) {
Map has = new HashMap();
has.put("word", "1");
has.put("love", "2");
try {
PrintWriter writer = new PrintWriter(new FileOutputStream("c:/myword.txt"), true);
Iterator i = has.keySet().iterator();
while (i.hasNext()) {
String word = i.next().toString();
int num = Integer.parseInt(has.get(word).toString());
writer.println(word + "|" + num);
}
}
catch (Exception e) {
}
}
写入文件的那一段中的
writer.println(word + "|" + num);
这一句中的"|"改为","
否则导入则会出错!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hrhero
2009-08-25 · TA获得超过142个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:88.1万
展开全部
请问你的操作的文件是UTF-8 的encoding吗?如果不是,改下试试,我猜测你的txt文件是GBK编码

补充回答:
把文件和eclipse都改成UTF-8试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式