간단한 문제가 있지만 요즘에는 큰 어려움을 겪고 있습니다. 화학 프로그램 (더 구체적으로 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;
}
}
}
내 문제는 단지 예 : "철"또는 "아연"등이 문자 요소와 함께 작동한다는 것입니다. 나는 또한 "K"와 같은 다른 사람들을 인식하기를 원합니다. 다른 문제는 때때로 다른 일부 요소를 건너 뜁니다. 예를 들어 "FeZnHg"를 입력하면 "Fe", "Zn"및 "Hg"로 구분됩니다. 그러나 "ZnFeHg"와 같이 다른 순서로 입력하면 어떤 이유로 "Zn"과 "Hg"만 감지하지만 "Fe"는 감지하지 못합니다.
다른 방법으로 제대로 작동하려면 어떻게 해결할 수 있습니까?
대소 문자 민감도는 제약 조건이 맞습니까? 즉, 머큐리는 항상 HG가 될 것입니까, 아니면 HG로 나타날 수 있습니까? –
코드를 단계별로 디버깅 해 보셨습니까? 더 나은 정규 표현식을 사용하십시오. – Bhaskar
@ NathanielFord 네, 항상 그렇게 될 것입니다. 나는 그것을 바로 잡을 다른 방법이있다. – Pkmmte