我有一个用java编写的周期表,我正在创建简单的化合物(仅为二进制化合物)并返回有关它们的信息,但我很难将一个化学公式转换为IUPAC的名称。我有它的设置,这样一个人就可以点击周期表上的元素,然后点击另一个元素,然后一个窗口会弹出,显示可能由这两个元素创建的化合物。这些化合物将显示为化学公式,如CO2或CH4。我想要能够转换的化合物的化学公式,有人选择进入iupac的名称,以便它可以显示与其他信息。
我试图使用化学开发工具包,但老实说,我对如何使用它没有太多的想法,即使它可以适用于解决我的问题。它让我手动放入债券类型,这似乎比我应该讨价还价的工作要多得多。
例如: CO2输出二氧化碳,CH4输出甲烷。
发布于 2019-01-01 02:45:26
使用IUPAC命名的API编程需要(真的)很长的时间。但是,有一种方法可以获得化学公式的适当化学名称,而不需要花费一生时间来创建API。这是一个非常肮脏的解决办法,但确实有效。您可以使用JSoup库通过本网站执行化学名称搜索。它发送一个HTTP请求,解析结果,并返回一个带有搜索结果的字符串数组。这真的很混乱,而且可能被大多数程序员认为是有罪的,但它是有效的。
public static String[] searchIUPACName(String chemicalFormula) throws IOException {
org.jsoup.nodes.Document doc = org.jsoup.Jsoup.connect("http://www.endmemo.com/chem/chemsearch.php")
.data("Search", "Search").data("name", chemicalFormula).data("sel", "f").post();
org.jsoup.select.Elements elements = doc.getElementById("note").getElementsByClass("cmline");
if (elements.isEmpty())
return new String[] { "No results" };
String[] names = new String[elements.size() - 1];
for (int i = 1; i < elements.size(); i++) {
names[i - 1] = elements.get(i).getElementsByClass("cmname").get(0).getElementsByTag("a").get(0).text();
}
return names;
}然而,就像杜考夫说的那样,IUPAC的名字是基于化合物的结构特性,而不是它的公式。所以你可以得到一个化学名称,但它不一定是IUPAC的正确名称。
发布于 2019-01-01 01:40:32
听起来你真的需要一个数据库:
create table compound (
first_chemical VARCHAR,
first_amount INT,
second_chemical VARCHAR,
second_amount INT,
name VARCHAR
)然后把它当作
INSERT INTO compound VALUES('H', 2, 'O', 1, 'Water')然后你可以做一些类似的事情
SELECT * FROM compound WHERE first_element = ? AND second_element = ?https://stackoverflow.com/questions/53992525
复制相似问题