有一个txt文档,格式如下:
[color=green][分类名] 文本内容
[分类名] 文本内容
[分类名] 文本内容[/color]
如何写入数据库中(oracle 10g)
要求 [color=green][][/color] 不写入数据库,分类名和文本内容用空格隔开,各行之间有空格,如果分类名相同则只能在数据库中存在一条记录,而分类名相同的文本内容都要追加到这条记录上.
图片在附件里
long start = System.currentTimeMillis();
File file = new File("test.txt");
Map map = new HashMap();
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();
}
我想这个方法更好
我想请问一下 [分类名]和 “文本内容”之间是否有空格呢?
可以试下这种方法
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);
}
}
}
}
打印出来的值为 :
分类名==== 文本内容
分类名==== 文本内容
这个方法更好,上个方法有局限性 建议楼主用这个方法:
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);
}
}
}
打印内容:
标题:分类名=====内容: 文本内容
标题:分类名=====内容: 文本内容
取出值后楼主应该会添加入库吧 呵呵
long start = System.currentTimeMillis();
File file = new File("test.txt");
Map map = new HashMap();
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 type = (Entry) iterator.next();
System.out.println(type.getKey() + ":" + type.getValue());
}
long end = System.currentTimeMillis();
System.out.println(end - start);
} catch (Exception e) {
e.printStackTrace();
}
不知道符不符合你的要求
这个方法局限性很大,每行后面也要空格,如果每行后面没空格应该放在while循环里
最后一行不能有回车
上面那个方法好像没有什么局限性啊 好像可以符合你的要求吧
相比JAVA复杂的硬代码,用集算器做会比较简单,还能方便嵌入JAVA(参考[url]http://blog.raqsoft.cn/?p=4792[/url] ),脚本如下:
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:内容)