gpt4 book ai didi

java - 嵌套 For 循环 - 用数组对象分隔字符串元素

转载 作者:行者123 更新时间:2023-12-04 05:37:34 24 4
gpt4 key购买 nike

我有一个简单的问题,但最近让我发疯。
我正在制作一个化学程序(更具体地说是 Android 应用程序),我有一种方法可以将用户输入的元素分开。例如,如果有人在那里输入“FeZnKPb”,它将被分成“Fe”、“Zn”、“K”和“Pb”。

为此,我使用了一些嵌套循环和变量来控制它。我在 Chem[] 数组中定义了所有元素。然后将分离的元素存储在名为savedChem[] 的数组中。它基本上只是遍历所有元素常量 (Chem[]),如果与输入匹配,则将这些元素的名称和公式复制到 savedChem[] 中。

这是我的代码:

public void separateElements(String Input)
{
boolean found = false;
int start = 0;
int end = 2;
int length = Input.length();

while(length >= end)
{
for(int x = 0; x < numChemicals; x++)
{
if((end + 0) > length)
{
end += 5;
break;
}
if(Input.substring(start, end).equals(Chem[x].getFormula()))
{
savedChem[numSaved].setName(Chem[x].getName());
savedChem[numSaved].setFormula(Chem[x].getFormula());
numSaved++;
start += 2;
end += 2;
found = true;
}
else
{
found = false;
}
}
if(!found)
{
start += 2;
end += 2;
}
}
}

我的问题是它仅适用于 2 个字符的元素,例如“Fe”或“Zn”。我希望它也能识别像“K”这样的其他人。
另一个问题是它有时会跳过一些其他元素。例如,如果我输入“FeZnHg”,它会将它们分成“Fe”、“Zn”和“Hg”。但是,如果我以不同的顺序输入它们,例如“ZnFeHg”,它会出于某种原因只检测“Zn”和“Hg”而不是“Fe”。

我还有什么其他方法可以解决这个问题以使其正常工作?

最佳答案

鉴于元素总是一个大写字符和一个或两个小写字符(只有在一些非常短的元素的情况下才两个),您可以使用带有一些前瞻的正则表达式将您的输入拆分为短字符串。

您可以使用 split 方法和一些前瞻将字符串拆分为元素字符串。考虑到纳撒尼尔福特的评论:

public enum ChemicalElement {
F, Fe, Zn, K, Pb, Umm, //and so on...
}

public List<ChemicalElement> separateElements(String input) {
String[] inputParts = input.split("(?=[A-Z]{1,1}[a-z]{0,2})");

List<ChemicalElement> elementList = new LinkedList<ChemicalElement>();
for (int i = 1; i < inputParts.length; i++) {
String inputPart = inputParts[i];

// note: throws IllegalArgumentException for unknown elements
ChemicalElement element = ChemicalElement.valueOf(inputPart);
if (null != element) {
elementList.add(element);
}

}
return elementList;
}

所以像这样的测试输入:
String input = "FeZnKPbUmmK";
List<ChemicalElement> elements = this.separateElements(input);

将为您提供以下列表:

[Fe、Zn、K、Pb、Umm、K]

关于java - 嵌套 For 循环 - 用数组对象分隔字符串元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730701/

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