Java - 按编号和字母拆分字符串

Aza*_*zel 12 java regex string split q

所以我有一个像这样的字符串 C3H20IO

我想做的是分割这个字符串,所以我得到以下内容:

Array1 = {C,H,I,O}
Array2 = {3,20,1,1}
Run Code Online (Sandbox Code Playgroud)

1作为对所述第三元件Array2是指示所述的单原子性质I元件.同样的O.这实际上是我正在努力的部分.

这是一个化学方程,所以我需要根据它们的名称和原子数等来分离元素.

Mal*_*jam 9

你可以尝试这种方法:

String formula = "C3H20IO";

//insert "1" in atom-atom boundry 
formula = formula.replaceAll("(?<=[A-Z])(?=[A-Z])|(?<=[a-z])(?=[A-Z])|(?<=\\D)$", "1");

//split at letter-digit or digit-letter boundry
String regex = "(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)";
String[] atoms = formula.split(regex);
Run Code Online (Sandbox Code Playgroud)

输出:

原子:[C,3,H,20,I,1,O,1]

现在所有偶数索引(0,2,4 ......)都是原子而奇数是相关的数字:

String[] a = new String[ atoms.length/2 ];
int[] n = new int[ atoms.length/2 ];

for(int i = 0 ; i < a.length ; i++) {
    a[i] = atoms[i*2];
    n[i] = Integer.parseInt(atoms[i*2+1]);
}
Run Code Online (Sandbox Code Playgroud)

输出:

a:[C,H,I,O]
n:[3,20,1,1]

  • 请记住,原子可以缩写为多个字母:Ag,Au,Mg等. (5认同)