双百求教.请问如何处理下列文本放到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不行呀? 展开
+ 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不行呀? 展开
5个回答
展开全部
首先确认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编码关系不大。
方法:打开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编码关系不大。
展开全部
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!:)
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!:)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的需求是:
pk_busiregister->CHAR(20) 业务对象注册主表主键 abc
还是
pk_busiregisterCHAR(20)->业务对象注册主表主键 abc
pk_busiregister->CHAR(20) 业务对象注册主表主键 abc
还是
pk_busiregisterCHAR(20)->业务对象注册主表主键 abc
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写入文件:
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);
这一句中的"|"改为","
否则导入则会出错!
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);
这一句中的"|"改为","
否则导入则会出错!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问你的操作的文件是UTF-8 的encoding吗?如果不是,改下试试,我猜测你的txt文件是GBK编码
补充回答:
把文件和eclipse都改成UTF-8试试。
补充回答:
把文件和eclipse都改成UTF-8试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询