gpt4 book ai didi

java - 在 Java 中使用正则表达式拆分输入

转载 作者:行者123 更新时间:2023-11-30 05:50:56 25 4
gpt4 key购买 nike

我正在制作一个程序,让用户输入化学物质,例如 C9H11N02。当他们输入时,我想把它分成几 block ,这样我就可以像 C9、H11、N、02 一样拥有它。当我拥有它时,我想对其进行更改,这样我就可以把它变成 C10H12N203,然后再放回去一起。这是我到目前为止所做的。使用我用过的正则表达式我可以提取整数值,但我将如何获得 C10、H11 等?

System.out.println("Enter Data");

Scanner k = new Scanner( System.in );
String input = k.nextLine();

String reg = "\\s\\s\\s";
String [] data;

data = input.split( reg );

int m = Integer.parseInt( data[0] );
int n = Integer.parseInt( data[1] );

最佳答案

可以使用 look arounds 来完成:

String[] parts = input.split("(?<=.)(?=[A-Z])");

环顾四周是零宽度、非消耗断言。

这个正则表达式在两个环视匹配的地方拆分输入:

  • (?<=.)表示“一个前面的字符”(即不在输入的开头)
  • (?=[A-Z])表示“下一个字符是大写字母”(所有元素以 A-Z 开头)

这是一个测试,包括用于某些边缘情况的双字符符号:

public static void main(String[] args) {
String input = "C9KrBr2H11NO2";
String[] parts = input.split("(?<=.)(?=[A-Z])");
System.out.println(Arrays.toString(parts));
}

输出:

[C9, Kr, Br2, H11, N, O2]

如果您随后想要拆分各个组件,请使用对 split() 的嵌套调用:

public static void main(String[] args) {
String input = "C9KrBr2H11NO2";
for (String component : input.split("(?<=.)(?=[A-Z])")) {
// split on non-digit/digit boundary
String[] symbolAndNumber = component.split("(?<!\\d)(?=\\d)");
String element = symbolAndNumber[0];
// elements without numbers won't be split
String count = symbolAndNumber.length == 1 ? "1" : symbolAndNumber[1];
System.out.println(element + " x " + count);
}
}

输出:

C x 9
Kr x 1
Br x 2
H x 11
N x 1
O x 2

关于java - 在 Java 中使用正则表达式拆分输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com