我必须做一个关于元素周期表的项目。我的困境如下。用户会向您发送分子方程式。它可以是任何长度。在这个数组中有大写字母,小写字母和数字。
我也有一个对象数组。每个对象代表元素周期表上的元素。现在我需要打破这个字符串,用户将我发送给更小的片段 - 由对象数组识别的片段。我还必须将答案乘以元素的最后一个字母旁边的一个或数字。
我已经尝试了以下内容。使字符串成为char数组。从后面运行数组 - 测试数字(Character.isDigit(a[i]);
),测试大写和小写......我总是遇到同样的问题。我不知道字符串会有多长。让我们说我找到一个数字。然后,如果前一个字符是小写字母,我需要另外检查大写字母。然后让我说我有分子方程式和我需要乘以的数量 - 如何让计算机知道从最后一个大写字母开始查看。
我希望有人明白这一点!
真的需要一些帮助。
另一个问题:为什么来这个代码不起作用:
String moleq = "HeKiLH2B6";
char[] a = moleq.toCharArray();
int g = moleq.length()-1;
int x = 1; //if not more than one of element - multiply getWeight by 1
int[][] indexofdigit = new int[moleq.length()][2];
int[] indexoflower = new int[moleq.length()];
for (int i = g; i <= 0; i--){
if (Character.isDigit(a[i])) {
String z = Character.toString(a[i]);
x = Integer.parseInt(z);
System.out.println("YES");
}
}
此代码从不打印我是吗?
答案 0 :(得分:5)
你的循环永远不会执行,因为你正在寻找i&lt; = 0条件。一开始不是这样,因为g> 0,如果你改变为i&gt; = 0它将起作用
答案 1 :(得分:3)
对于化学式,也许正则表达式(regexp)会很有趣。像([A-Z] [a-z]?[0-9] )+。如果我没有错(),则将元素及其基数隔离(例如Fe 2 O 3 - >第1族(Fe 2)+第2族(O 3))。看看Pattern和Matcher吧。
答案 2 :(得分:2)
请注意,使用Java 5+,您可以使用for each循环简化循环:
for (char c : a){
if (Character.isDigit(c)) {
String z = Character.toString(c);
x = Integer.parseInt(z);
System.out.println("YES");
}
}
扩大SJuan的建议:
String input = "HeKiLH2B6";
Pattern p = Pattern.compile("([A-Z][a-z]*)(\\d*)");
Matcher m = p.matcher( input );
while(m.find()){
String element = m.group( 1 );
String cardinalityStr = m.group( 2 );
int cardinality= 1;
if( cardinalityStr != null && cardinalityStr .length() > 0)
{
cardinality= Integer.parseInt( cardinalityStr );
}
System.out.println( element + cardinality);
}
收率:
He1
Ki1
L1
H2
B6
编辑:如果用户输入He-Ki-L-H2-B6
或He Ki L H2 B6
之类的内容,这也会有用。
答案 3 :(得分:1)
SJuan76在代码中的答案(添加了不情愿的组限定符):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
// the compiled pattern can be re-used, are thread-safe
// and thus can be static final
Pattern p = Pattern.compile("([A-Z][a-z]?[0-9]*)+?");
// Per molecule (well, string) a matcher must be obtained.
Matcher m = p.matcher("HeKiLH2B6");
while(m.find()) {
System.out.println(m.group());
}
}
}
打印:
He
Ki
L
H2
B6