for loop(记住最后看的地方)& Character.isDigit()

时间:2011-04-18 10:28:25

标签: java for-loop char

我必须做一个关于元素周期表的项目。我的困境如下。用户会向您发送分子方程式。它可以是任何长度。在这个数组中有大写字母,小写字母和数字。

我也有一个对象数组。每个对象代表元素周期表上的元素。现在我需要打破这个字符串,用户将我发送给更小的片段 - 由对象数组识别的片段。我还必须将答案乘以元素的最后一个字母旁边的一个或数字。

我已经尝试了以下内容。使字符串成为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");

    }
}

此代码从不打印我是吗?

4 个答案:

答案 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吧。

  • 如果我错了,我相信Google中的公式有一个正则表达式。它通常不依赖于语言(如果它适用于Perl,它适用于Java)。

答案 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-B6He 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