我有一个用Java编写的周期表,我正在尝试创建简单的化合物(仅二进制化合物)并返回有关它们的信息,但是我无法将化学式转换为IUPAC名称。我进行了设置,以便一个人可以单击元素周期表上的一个元素,然后单击另一个元素,然后将弹出一个窗口,显示可能由这两个元素创建的化合物。这些化合物将显示为化学式,例如CO2或CH4。我希望能够将某人选择的化合物的化学式转换为iupac名称,以便可以与其他信息一起显示。
我尝试使用化学开发工具包,但老实说,我对如何使用它没有太多了解,即使它可以解决我的问题。这使我手动输入了债券类型,这似乎比我应该讨价还价要多得多。
例如:
CO2将产生二氧化碳,而CH4将产生甲烷。
最佳答案
对使用IUPAC命名法的API进行编程(真的)将花费很长时间。但是,有一种方法可以为化学式获取正确的化学名称,而无需花费毕生的时间来创建API。这是一个非常肮脏的解决方法,但它确实起作用。您可以使用JSoup库通过this website进行化学名称搜索。它发送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名称。
关于java - 将化学式转换为其iupac名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53992525/