2012-07-30 4 views
1

문자 배열에서 다른 요소를 테스트했으며 조건에 맞지 않으면 배열에서 요소를 제거하려고합니다. 이것을 할 수있는 방법이 있습니까?배열에서 특정 요소를 제거하는 방법

여기 내 코드입니다 SOFAR

String s; 
    char[] b = inputString.toCharArray(); 
    b = new char[b.length]; 
    do 
    { 

     if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.')) 
     { 
      s = Character.toString(b[i]); 
      if(s.equals("+")) 
      { 
       t = 1; 
      } 
      else if(s.equals("-")) 
      { 
       t = 2; 
      } 
      else if // and so on 

      } 
      else 
      { 
       t = 1029; 
      } 
      //want to delete element here if they fail if test 
     } 
+0

지금까지 무엇을 했습니까? – kosa

+0

시도해 보셨습니까? 몇 가지 코드를 보여줄 수 있습니까? – talnicolas

+0

은 do ... while 루프와 if 문으로 요소를 테스트했습니다. 내 int i는 모든 루프를 증가시키고 b [i]로 요소를 테스트합니다. – imulsion

답변

2

이것은 당신이 원하는 일을해야합니다

ArrayList<char> charList = new ArrayList<char>(0); 

for (int i= 0; i < b.length; i++) { 
    if (b[i] == condition) { 
     charList.Add(b[i]); 
    } 
} 

charList.toArray(); 
+1

chararray에서 char을 제거하고 싶습니다. – Prasad

1

그것은 아마 여기 switch 문을 사용하는 것이 더 좋은 생각이 될 것입니다. 배열에서 원하지 않는 문자를 제거하지 않고 (Iterator을 사용하지 않는 한 반복 중에 돌연변이가 발생 함) StringBuilder 클래스를 사용하여 을 수행하는 모든 문자를 캐치하지 않으려면을 사용 하시겠습니까?

1

정말 요소를 삭제할 수는 없지만 b [i] = 0; 주어진 코드의 끝에. 배열은 특정 길이이며 길이를 변경할 수 없으므로 배열의 해당 부분을 제거하려면 대신 목록을 사용하는 것이 좋습니다.

List temp = b.asList(); 
Iterator it = temp.iterator(); 
while(it.hasNext()) 
{ 
    if(it.next() == "t") //your modification code here 
     it.remove(); 
} 
char[] newB = temp.toArray(); 

나는 당신 생각에 도움이 될 것입니다.

1
char[] finishedArray = new char[0]; 
char[] arrayToCheck = new char[]{ 'a', 'b', 'c', 'd', 'e', 'f', 'g' }; 
for(int i = 0; i < arrayToCheck.length; i++) 
{ 
    if(!doesNOTMeetSomeCondition(arrayToCheck[ i ])) 
    { 
     //DOES meet keep condition, add to new array 
     char[] newCharArray = new char[ finishedArray.length + 1 ]; 
     for(int j = 0; j < finishedArray.length; j++) 
     { 
      newCharArray[ j ] = finishedArray[ j ]; 
     } 
     newCharArray[ finishedArray.length ] = arrayToCheck[ i ]; 
     finishedArray = newCharArray; 
    } 
} 
//finishedArray contains desired result 

목록을 사용하면 데이터 구조를 변경하고 문자를 포함하는 문자열을 사용하여 편안 할 수 있다면 훨씬 더 피팅 도구가 될 것입니다. 의견이 좋은 코드 형식을 허용하지 않기 때문에

List<String> finishedList = Arrays.asList('a', 'b', 'c', 'd', 'e', 'f', 'g'); 
for(String charInList : finishedList) 
{ 
    if(doesNOTMeetSomeCondition(charInList.toCharArray()[ 0 ])) 
    { 
     finishedList.remove(charInList); 
    } 
} 
//finishedList contains the desired result 
2

은 : 코드의 시작 부분에서

을, 당신은 char[]String 내용을 얻을 즉시 같은 크기의 새로운 char[]을 할당하여 다시 잃을 변수에.

char[] b = inputString.toCharArray(); 
b = new char[b.length]; 

그래서 루프 이후는 문자열 초기화가 아닌 기본 초기화 된 배열에서 작동합니다. 복사를 수행하려면 두 개의 배열 참조가 필요합니다.

1

뭔가 프로그램 작성하지입니다 : 당신은 당신의 inputString에서 char[]을 만들 다음 다음 줄에 당신이 당신의 b 변수에 완전히 새로운 빈 char[]을 할당

String s; 
char[] b = inputString.toCharArray(); 
b = new char[b.length]; 
do { 
    if(!(b[i]>='0')&&(b[i]<='9')&&(b[i]!='.')) { 
     ... 
    } 
} while... 

. 실제로 0, 9 또는 i과 같지 않습니다. 오류로 그 행을 여기 넣었습니까?

제거를 위해 ArrayList를 반복적으로 사용하고 remove으로 지정할 특정 인덱스를 제거 할 수있는 위치를 제안합니다.

관련 문제