工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2290|回复: 5

怎么把一个字段的内容分开存储在不同字段

[复制链接]
发表于 2007-3-21 14:51 | 显示全部楼层 |阅读模式
例如在备注字段里有以下内容:
刊名: Journal of Integrative Plant Biology 植物学报(英文版) 主办: 中国植物学会;中国科学院植物研究所 周期: 月刊 出版地:北京市 语种: 中英 开本: 大16开 ISSN 0577-7496 CN 11-1896/Q 邮发代号 2-500 曾用刊名:Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年:1952 中国期刊方阵来源刊 ASPT来源刊 中国期刊网来源刊

怎么能把刊名,主办等的内容提取出来分别存放在刊名,主办等字段呢?
或者说只把刊名的内容显示出来再把它加进刊名字段?
发表于 2007-3-21 16:05 | 显示全部楼层
观察那段文字,发觉可以用“:”拆分
回复

使用道具 举报

 楼主| 发表于 2007-3-21 16:52 | 显示全部楼层
怎么折分呢?能不能说具体点呢。最好给个代码的列子。
还有就是那些 刊名: 主办:曾用刊名:之类的不是每个元组都有,那就不能按顺序把他们进行存放,而是要先判断关键字再把它放入对应的字段。
那要怎么判断关键字呢?
回复

使用道具 举报

发表于 2007-3-21 17:24 | 显示全部楼层
...不知道说什么...
回复

使用道具 举报

发表于 2007-3-22 14:06 | 显示全部楼层
我是这样考虑的:
首先,因为提到的那些字段都未必都有,所以我用一个ArryLis把所有的字段给装起来。
  List<String> fields = new ArrayList<String>();
  fields.add("刊名");
  fields.add("主办");
  fields.add("周期");
  fields.add("出版地");
  fields.add("语种");
  fields.add("开本");
  fields.add("曾用刊名");
  fields.add("创刊年");
接着按“:”来拆分给出的文字
String str = "刊名:Journal of Integrative Plant Biology 植物学报(英文版) 主办:中国植物学会;中国科学院植物研究所 周期: 月刊 出版地:北京市 语种: 中英 开本: 大16开 ISSN 0577-7496 CN 11-1896/Q 邮发代号 2-500 曾用刊名:Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年:1952 中国期刊方阵来源刊 ASPT来源刊 中国期刊网来源刊";
  String[] strs = str.split(":");
  Map<String, String> result = new HashMap<String, String>();
  int length = strs.length;
  for (int i = 0; i < length; i++) {
   System.out.println(strs);
  }
结果是:
刊名
Journal of Integrative Plant Biology 植物学报(英文版) 主办
中国植物学会;中国科学院植物研究所 周期
月刊 出版地
北京市 语种
中英 开本
大16开 ISSN 0577-7496 CN 11-1896/Q 邮发代号 2-500 曾用刊名
Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年
1952 中国期刊方阵来源刊 ASPT来源刊 中国期刊网来源刊
观察结果,我们发觉strs[0]==刊名,strs[1]==Journal of Integrative Plant Biology 植物学报(英文版) 主办,strs[2]==中国植物学会;中国科学院植物研究所 周期
发觉这样一个规律,当i!=0&&i<strs.length的时候str其实是上一字段的值和下一个字段的字段名。
前面说了,所有的字段名都已经add到ArrayList了,现在我们又把整段文字按“:”拆分开,现在查找拆分开来的每一个字符串,看它是否包含有字段名,包含的话,可以把当前字符串的下一个字符串作为该字段的值,作为对应,还要一个map来建立字段名到字段值的对应关系
  Map<String, String> result = new HashMap<String, String>();
  int fieldsLeg = fields.size();
  for (int i = 0; i < length; i++) {
   for (int y = 0; y < fieldsLeg; y++) {
    String field = (String) fields.get(y);
    if (strs.endsWith(field) && i < length && y < fieldsLeg) {
     String fieldValue = strs[i + 1];
     result.put(field, fieldValue);
    }
   }
  }

完整的程序应该是:
public class Test {
public static void main(String[] args) {
  List<String> fields = new ArrayList<String>();
  fields.add("刊名");
  fields.add("主办");
  fields.add("周期");
  fields.add("出版地");
  fields.add("语种");
  fields.add("开本");
  fields.add("曾用刊名");
  fields.add("创刊年");
  String str = "刊名:Journal of Integrative Plant Biology 植物学报(英文版) 主办:中国植物学会;中国科学院植物研究所 周期: 月刊 出版地:北京市 语种: 中英 开本: 大16开 ISSN 0577-7496 CN 11-1896/Q 邮发代号 2-500 曾用刊名:Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年:1952 中国期刊方阵来源刊 ASPT来源刊 中国期刊网来源刊";
  String[] strs = str.split(":");

  int length = strs.length;
  for (int i = 0; i < length; i++) {
   System.out.println(strs);
  }
  Map<String, String> result = new HashMap<String, String>();
  int fieldsLeg = fields.size();
  for (int i = 0; i < length; i++) {
   for (int y = 0; y < fieldsLeg; y++) {
    String field = (String) fields.get(y);
    if (strs.endsWith(field) && i < length && y < fieldsLeg) {
     String fieldValue = strs[i + 1].replace((String) fields
       .get(y), "");
     result.put(field, fieldValue);
    }
   }
  }
  for (int i = 0; i < fieldsLeg; i++) {
   String key = (String) fields.get(i);
   if (result.containsKey(key) == true) {
    System.out.println(key + ":" + result.get(key));
   }
  }
  // TODO Auto-generated method stub
}
}
运行结果为:
刊名:Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年
主办:中国植物学会;中国科学院植物研究所 周期
周期: 月刊 出版地
出版地:北京市 语种
语种: 中英 开本
开本: 大16开 ISSN 0577-7496 CN 11-1896/Q 邮发代号 2-500 曾用刊名
曾用刊名:Acta Botanica Sinica;Journal of Integrative Plant Biology(2005-);植物学报(1994-2004);中国植物学报(英文版) 创刊年
创刊年:1952 中国期刊方阵来源刊 ASPT来源刊 中国期刊网来源刊
当然这样做还不理想,有些值被覆盖了,

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2007-3-22 22:58 | 显示全部楼层
谢谢LS详细的解答
已经搞定了,用到WORD的替换
把每个关键字替换成 ^p关键字 (关键字前加多一个回车)
这样就变成了:
刊名: Journal of Integrative Plant Biology 植物学报(英文版)
主办: 中国植物学会;中国科学院植物研究所
周期: 月刊
出版地:北京市
语种: 中英
开本: 大16开
。。。。。
然后再用VC读取每一行,判断其所包括的关键字,再放入相应的字段,不过这样插入大量数据时比较慢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-14 08:20

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表