我有一个数据库,其中我有3列(id,name,info_link)。
我在数据库中存储了 id 和名称。
我有一个文本文件,其中我已经删除了所有信息链接。
信息链接采用以下形式:http://someURL/**Name**.htm
现在我要做的是从数据库中取一个名字,从链接的文本文件中读取一行,查找链接(行)是否包含该药物名称,将该链接放在记录的info_link列中。
这就是我的代码
BufferedReader reader = new BufferedReader(new FileReader("./Links.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("./AddedLinks.txt"));
int id = 1;
//Creates a connection to the Database
connection = DriverManager.getConnection(DB_URL,DB_USER,DB_PASS);
statement = connection.createStatement();
for(id=1;id<=1153;)
{
query = statement.executeQuery("SELECT name FROM drug_list WHERE id = '"+id+"';");
query.next();
String name = query.getString(1);
String words[] = name.split(" ");
String Myvalue = reader.readLine();
boolean Found = false;
while(!Found)
if(Myvalue.toLowerCase().contains(words[0].toLowerCase()))
{
Boolean f = false;
System.out.println("Found"+name);
update = connection.prepareStatement("UPDATE drug_list SET info_link = ? WHERE id = ?;");
update.setString(1, Myvalue);
update.setInt(2, id);
f = update.execute();
if(!f)
{
System.out.println("QSE");
id++;
writer.write(Myvalue);
Found = true;
}
}
else
{
System.out.println("Could Not Find"+name+"\n");
id++;
Found = false;
}
}
我能够匹配单字上必须处理的容器链接。但问题是
我有一个像
这样的药物名称等。
和他们的对应链接如:
- http://Somelink/**albuterol_salbutamol**.htm
- http://Somelink/**dorzolamide_timolol**.htm
此外,数据库中有一些名称在文本文件中没有相应的链接,我也想跳过这些。我的数据库总共有1153个值。
我也有一些药物名称,如
所以这会产生一个问题,如果我只匹配我分手的单词[0]。因为它将更新Calcium Something Field Only的所有值。
答案 0 :(得分:1)
您使用正则表达式来分割单词。像
这样的东西String words[] = a.split("[/()]");
并迭代并检查所有单词而不是一个单词。
答案 1 :(得分:0)
好的,这就是我要做的事情:迭代你的名字并使用split()和空格作为分隔符来获取数组中的每个单词。然后,对于每个链接,从最后一个破折号获取子字符串,直到“.htm”(当然,这取决于您的链接的设置方式。您也可以跳过此步骤)。然后,在该字符串上,检查名称数组中的每个项目是否包含在链接中。为每个匹配计算一个整数值,并将其与链接一起保存,例如在一个数组,HashMap等中(或者只保留一个变量中匹配最多的链接,如果找到一个匹配较高的链接,你可以更新)。最后,获取最匹配的链接。
目前,如果我看到了这一点,你已经分裂,但你只使用该数组的第一个值。
当然,这不是故障安全的,但它是我能想到的最好的。如果你想排除任何错误,你必须手动检查结果。