问题描述
有一个txt文档,格式如下:[分类名] 文本内容[分类名] 文本内容[分类名] 文本内容如何写入数据库中(oracle 10g)要求 [] 不写入数据库,分类名和文本内容用空格隔开,各行之间有空格,如果分类名相同则只能在数据库中存在一条记录,而分类名相同的文本内容都要追加到这条记录上.图片在附件里 问题补充:李石雄 写道
解决方案
long start = System.currentTimeMillis();File file = new File("test.txt");Map<String, String> map = new HashMap<String, String>();try {FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);BufferedReader bf = new BufferedReader(isr);String str = "";while((str = bf.readLine()) != null){//String[] s = str.split(" ");//System.out.println(str);if(!"".equals(str.trim())){String[] s = new String[2];s[0] = str.substring(0,str.indexOf(" "));s[1] = str.substring(str.indexOf(" ")+1);//for (int i = 0; i < s.length; i++) {if(s[0].indexOf("[") != -1){String bookName = s[0].substring(1,s[0].length() - 1);if(map.containsKey(bookName)){String bookNames = map.get(bookName) + "," + s[1];map.put(bookName, bookNames);}else{map.put(bookName, s[1]);}//}}}}for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {Entry<String, String> type = (Entry<String, String>) iterator.next();System.out.println(type.getKey() + ":" + type.getValue());}long end = System.currentTimeMillis();System.out.println(end - start);} catch (Exception e) {e.printStackTrace();}我想这个方法更好
解决方案二:
相比JAVA复杂的硬代码,用集算器做会比较简单,还能方便嵌入JAVA(参考http://blog.raqsoft.cn/?p=4792 ),脚本如下:A1=file("E:\s.txt").import@i()A2=A1.select(~).(~.array@t("")).new(~(1):分类,~(2):内容)//去空行,创建分类和内容列的序表A3=A2.group(分类).new(分类.~,~.(内容).string():内容)//按分类分组,将内容拼接到一起A4 >db.update(A3,tableName,col1:分类,col2:内容)
解决方案三:
上面那个方法好像没有什么局限性啊 好像可以符合你的要求吧
解决方案四:
最后一行不能有回车
解决方案五:
这个方法局限性很大,每行后面也要空格,如果每行后面没空格应该放在while循环里
解决方案六:
long start = System.currentTimeMillis();File file = new File("test.txt");Map<String, String> map = new HashMap<String, String>();try {FileInputStream fis = new FileInputStream(file);InputStreamReader isr = new InputStreamReader(fis);BufferedReader bf = new BufferedReader(isr);String str = "";StringBuffer sb = new StringBuffer();while((str = bf.readLine()) != null){sb.append(str);}str = sb.toString();String[] s = str.split(" ");for (int i = 0; i < s.length; i++) {if(s[i].indexOf("[") != -1){String bookName = s[i].substring(1,s[i].length() - 1);if(map.containsKey(bookName)){String bookNames = map.get(bookName) + "," + s[i+1];map.put(bookName, bookNames);}else{map.put(bookName, s[i+1]);}}}for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {Entry<String, String> type = (Entry<String, String>) iterator.next();System.out.println(type.getKey() + ":" + type.getValue());}long end = System.currentTimeMillis();System.out.println(end - start);} catch (Exception e) {e.printStackTrace();}不知道符不符合你的要求
解决方案七:
这个方法更好,上个方法有局限性 建议楼主用这个方法:public static void main(String[] args) {String str="[分类名] 文本内容 [分类名] 文本内容";str =str.replace("[", "-");String [] strs = str.split("-");for(int i=0;i<strs.length;i++){if(!strs[i].equals("")){String [] s = strs[i].split("]");String title = s[0];String content = s[1];System.out.println("标题:"+title+"====="+"内容:"+content);}}}打印内容:标题:分类名=====内容: 文本内容 标题:分类名=====内容: 文本内容取出值后楼主应该会添加入库吧 呵呵
解决方案八:
可以试下这种方法 public class test {public static void main(String[] args) {String str="[分类名] 文本内容 [分类名] 文本内容";String [] strs = str.split(" ");for(int i=0;i<strs.length;i++){if(!strs[i].equals("")){String [] s = strs[i].split("]");String title = s[0].replace("[", "");String content = s[1];System.out.println(title+"===="+content);}}}}打印出来的值为 :分类名==== 文本内容分类名==== 文本内容
解决方案九:
我想请问一下 [分类名]和 “文本内容”之间是否有空格呢?