2 回答

TA贡献1946条经验 获得超4个赞
当您进行迭代时,您基本上需要计算令牌。括号是简单的标记。数字很简单——只要下一个字符是数字,你就必须继续前进。
真正的技巧是元素名称的字符。有几种方法可以解决这个问题。如果您可以使用标准符号计算元素,您可以简单地假设小写字母是当前标记的延续,而大写字母是新标记的开始。因此 NaCl 会正确地变成两个标记,Na 和 Cl,而 CO2 会变成三个标记,C、O 和 2。
如果你不能指望标准化的大写,你的生活会变得更加艰难。

TA贡献1875条经验 获得超5个赞
如果您可以假设小写字母是当前标记的延续,则可以使用以下示例:
public static void main(String[] args) {
String test = "Na3(CO2)3";
Pattern r = Pattern.compile("A[cglmrstu]|B[aehikr]?|C[adeflmnorsu]?|D[bsy]|E[rsu]|F[elmr]?|G[ade]|H[efgos]?|I[nr]?|Kr?|L[airuv]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]|S[bcegimnr]?|T[abcehilm]|U(u[opst])?|V|W|Xe|Yb?|Z[nr]|\\d|\\(|\\)");
Matcher matcher =r.matcher(test);
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
}
这是输出:
Start index: 0 End index: 2 Na
Start index: 2 End index: 3 3
Start index: 3 End index: 4 (
Start index: 4 End index: 5 C
Start index: 5 End index: 6 O
Start index: 6 End index: 7 2
Start index: 7 End index: 8 )
Start index: 8 End index: 9 3
添加回答
举报