Java의 배열에서 객체를 어떻게 제거합니까?


82

n 개의 객체 의 배열이 주어 졌을 때, 이것이 strings배열이고 다음과 같은 값을 가지고 있다고 가정 해 봅시다 .

foo[0] = "a";
foo[1] = "cc";
foo[2] = "a";
foo[3] = "dd";

배열에서 "a" 와 같은 모든 문자열 / 객체를 삭제 / 제거하려면 어떻게해야 합니까?


2
Java에서는 배열의 크기를 조정할 수 없습니다. 사소한 일이기 때문에 요소를 무효화하고 싶지는 않다고 가정합니다. 간격을 제거하기 위해 다른 요소를 이동 하시겠습니까?
Dan Dyer

1
이제 내가 할 수 있다는 것을 알기 때문에 사소한 일입니다. ;) 감사!
ramayac

답변:


112

[즉시 사용할 수있는 코드가 필요하면 내 "Edit3"(잘라 내기 후)로 스크롤하십시오. 나머지는 후세를위한 것입니다.]

Dustman의 아이디어 를 구체화하려면 :

List<String> list = new ArrayList<String>(Arrays.asList(array));
list.removeAll(Arrays.asList("a"));
array = list.toArray(array);

편집 : Arrays.asList대신 사용하고 있습니다 Collections.singleton: singleton은 하나의 항목으로 제한되지만 asList접근 방식은 나중에 필터링 할 다른 문자열을 추가 할 수 있습니다.Arrays.asList("a", "b", "c") .

Edit2 : 위의 접근 방식은 동일한 배열을 유지하므로 배열은 여전히 ​​동일한 길이입니다. 마지막 요소는 null로 설정됩니다. 당신이 원하는 경우 새로운 배열이 정확히 필요한 크기,이 대신 사용 :

array = list.toArray(new String[0]);

Edit3 : 같은 클래스에서이 코드를 자주 사용하는 경우 클래스에 다음 코드를 추가하는 것이 좋습니다.

private static final String[] EMPTY_STRING_ARRAY = new String[0];

그러면 함수는 다음과 같습니다.

List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.removeAll(Arrays.asList("a"));
array = list.toArray(EMPTY_STRING_ARRAY);

그러면 new함수가 호출 될 때마다 처리 되는 쓸모없는 빈 문자열 배열로 힙을 버리는 것을 중지합니다 .

cynicalman의 제안 (댓글 참조)은 힙 쓰레기 처리에도 도움이 될 것이며 공정성을 위해 언급해야합니다.

array = list.toArray(new String[list.size()]);

명시적인 크기를 잘못 이해하는 것이 더 쉬울 수 있기 때문에 내 접근 방식을 선호합니다 (예 : size()잘못된 목록 호출 ).


마음에 들어서 다행입니다. 첫 번째뿐만 아니라 "a"의 모든 인스턴스 제거를 지원하도록 항목을 수정했습니다 . :-)
Chris Jester-Young

Ooff ... 결승선에서 격추되었습니다. 계속 편집해야한다는 것을 알았습니다. 이 시스템은 익숙해지는 데 약간의 시간이 걸립니다. 좋은 편집!
Dustman

GHad : 위의 Edit2를 읽었습니까? 귀하가 언급 한 내용을 정확히 다루며 귀하의 게시물 전에 게시되었습니다.
Chris Jester-Young

2
new String [0] 대신 list.toArray (new String [list.size ()])가 아닌 이유는 코드가 올바른 크기이면 새 배열을 사용하기 때문입니다.
cynicalman

예, 작동합니다. 그렇지 않으면 일부 코드 (주로 Java 클래스 라이브러리에 있음)는 String [0]의 정적 인스턴스 (및 기타 유사한 크기가 0 인 배열)를 저장하고 매번 새로 생성하는 대신 정적 인스턴스를 전달합니다. :-)
Chris Jester-Young

31

Java 8의 대안 :

String[] filteredArray = Arrays.stream(array)
    .filter(e -> !e.equals(foo)).toArray(String[]::new);

이것은 받아 들여진 대답이어야합니다. 다른 프로그래밍 언어가 더 작고 명확한 코드로이 작업을 수행 할 수 있다는 점을 고려하지 않지만 ... 이것은 다른 라이브러리에 의존하지 않고 Java가 제공 할 수있는 최선의 방법입니다.
제이슨

7
깔끔하지만 System.arraycopy에 비해 놀랍도록 비효율적입니다. 아마도 실제 코드에서 이것을해서는 안됩니다.
Bill K

foo는 최종 또는 효과적으로 최종해야 바깥 쪽 범위에 정의 된 컴파일시 에러 지역 변수 foo는 던지고 동적 문자열 변수 인 경우
Mahender 레디 야사

질문은 "n 개의 객체의 배열이 주어Stream.of(foo).filter(s -> ! s.equals("a")).toArray() 졌습니다 "라고 나와 있습니다. 따라서 충분합니다.
Kaplan

20

메이크업 List과 배열의 아웃 Arrays.asList()및 통화 remove()모든 적절한 요소. 그런 다음 toArray()'목록'을 호출 하여 다시 배열로 만듭니다.

성능이별로 좋지는 않지만 적절하게 캡슐화하면 나중에 언제든지 더 빠르게 작업을 수행 할 수 있습니다.


3
댓글 다시 : 괜찮습니다. 곧 익숙해 질 것입니다. :-) 나는 독자들이 Arrays.asList () (불변 목록)의 결과에서 요소를 제거 할 수 있다는 생각을 얻기를 원하지 않았기 때문에 내 게시물을 게시 했으므로 예제가 처리 할 수 ​​있다고 생각했습니다. :-)
Chris Jester-Young

어, 크기를 조정할 수없는 목록을 의미했습니다 (add () 및 remove ()가 작동하지 않음). :-P 여전히 사용 가능한 set () 메소드가 있습니다. :-)
Chris Jester-Young

이상하게 보일 수 있지만 제 경험으로는이 접근 방식의 성능 저하가 미미합니다.
Marcus Downing

8
이건 뭐야? @ 크리스의 결과 목록이 지적 Arrays.asList()을 지원하지 않습니다 remove(). 이 대답은 완전히 유효하지 않습니까? 일부 댓글이 삭제 된 것 같아서 논의되었는지 모르겠습니다.
LarsH 2011 년

1
Chris와 LarsH 모두 옳습니다 : 배열 지원 목록 (즉, Arrays.asList ()로 생성 된 목록)은 구조적으로 불변이므로이 답변을 완전히 무효화합니다. 그러나 지금까지 나는 17 개의 찬성표를 본다. 만드는 하나의 경이 ...
이고르 Soudakevitch

15

언제든지 다음을 수행 할 수 있습니다.

int i, j;
for (i = j = 0; j < foo.length; ++j)
  if (!"a".equals(foo[j])) foo[i++] = foo[j];
foo = Arrays.copyOf(foo, i);

6

외부 라이브러리를 사용할 수 있습니다.

org.apache.commons.lang.ArrayUtils.remove(java.lang.Object[] array, int index)

Apache Commons Lang http://commons.apache.org/lang/ 프로젝트에 있습니다 .


ArrayUtils.removeElement(boolean[] array, boolean element)매우 유용합니다.
scai

5

아래 코드 참조

ArrayList<String> a = new ArrayList<>(Arrays.asList(strings));
a.remove(i);
strings = new String[a.size()];
a.toArray(strings);

4

List추가 배열 로 변환 하거나 생성 하지 않고 배열에서 여러 요소를 제거해야하는 경우 제거 할 항목 수에 의존하지 않고 O (n)에서 수행 할 수 있습니다.

다음 a은 초기 배열이며 int... r제거 할 요소의 고유 한 순서 인덱스 (위치)입니다.

public int removeItems(Object[] a, int... r) {
    int shift = 0;                             
    for (int i = 0; i < a.length; i++) {       
        if (shift < r.length && i == r[shift])  // i-th item needs to be removed
            shift++;                            // increment `shift`
        else 
            a[i - shift] = a[i];                // move i-th item `shift` positions left
    }
    for (int i = a.length - shift; i < a.length; i++)
        a[i] = null;                            // replace remaining items by nulls

    return a.length - shift;                    // return new "length"
}  

소규모 테스트 :

String[] a = {"0", "1", "2", "3", "4"};
removeItems(a, 0, 3, 4);                     // remove 0-th, 3-rd and 4-th items
System.out.println(Arrays.asList(a));        // [1, 2, null, null, null]

작업에서 먼저 배열을 스캔하여 "a"의 위치를 ​​수집 한 다음을 호출 할 수 removeItems()있습니다.


1
이러지 마세요. 혼란스럽고 느리고 오류가 발생하기 쉽습니다. 대신 System.arraycopy ()를 사용하십시오. 이러한 방식으로 배열을 조작하려는 경우 길이를 추적해야한다는 사실에 대한 보너스 포인트도 있습니다.
Bill K

3

목록을 만든 다음 제거하고 배열로 돌아가는 것에 대한 무언가가 나를 잘못 생각합니다. 테스트하지 않았지만 다음이 더 잘 수행 될 것이라고 생각합니다. 예, 아마도 부당하게 사전 최적화하고 있습니다.

boolean [] deleteItem = new boolean[arr.length];
int size=0;
for(int i=0;i<arr.length;i==){
   if(arr[i].equals("a")){
      deleteItem[i]=true;
   }
   else{
      deleteItem[i]=false;
      size++;
   }
}
String[] newArr=new String[size];
int index=0;
for(int i=0;i<arr.length;i++){
   if(!deleteItem[i]){
      newArr[index++]=arr[i];
   }
}

3

나는 이것이 매우 오래된 게시물이라는 것을 알고 있지만 여기에 대한 답변 중 일부가 나를 도왔습니다. 그래서 여기에 내 tuppence 'ha'penny의 가치가 있습니다!

나는 이것을 변경하기 전에 내가 다시 쓰는 배열의 크기를 조정해야한다고 생각하기 전에 꽤 오랫동안 이것을 작동시키는 데 어려움을 겪었습니다. ArrayList목록 크기를 변경 .

경우 ArrayList당신이 그것을 시작보다 크거나 적은 요소로 끝을 수정하고 있다는 라인은 List.toArray()당신이 좋아하는 뭔가가 필요하므로, 예외가 발생합니다 List.toArray(new String[] {})또는 List.toArray(new String[0])새로운 (올바른) 크기의 배열을 만들기 위해.

내가 그것을 알고있는 지금 당연하게 들린다. 새롭고 익숙하지 않은 코드 구조를 이해하고 여기의 일부 이전 게시물에서 명확하지 않은 Android / Java 초보자에게는 그다지 분명하지 않습니다. 그래서 제가 그랬던 것처럼 몇 시간 동안 머리를 긁적 거리는 다른 사람들에게이 요점을 정말로 명확히하고 싶었습니다. !


나는 다른 코더들이 당연하게 여기는 것을 놓 쳤기 때문에 작동하지 않는 코드 조각을 자주 사용하기 때문에 이것을 게시 할 필요성을 느꼈습니다. GHad는 내 코드가 작동하도록 배열 크기에 대해 지적했습니다 (이를 명확히 해주셔서 감사합니다). 무언가를 시도하는 것이 배우는 방법이며, 그것이 내가 코드를 SO에서 가져 와서 어떻게 / 왜 작동하는지 이해하려고 노력할 자격이 있다면 그렇게 될 것입니다. 무급 아마추어로서 나는 일부 사람들이 자신이 있다고 생각하는 Java 천재가 아닙니다! 고맙게도 대부분의 SO 기고자들은 다른 사람들이 더 나은 코드를 작성하는 데 도움이되는 질문에 답합니다. 이에 대해 감사 할 만합니다!
DDSports 2013

3

여기에 많은 답변이 있습니다. 제가보기에 문제는 컬렉션 대신 배열을 사용하는 이유를 말하지 않았다는 것이므로 몇 가지 이유와 적용 할 솔루션을 제안하겠습니다 (대부분의 솔루션 여기에있는 다른 질문에서 이미 답변을 받았으므로 너무 자세히 설명하지 않겠습니다) :

이유 : 컬렉션 패키지가 존재하는지 몰랐거나 신뢰하지 않았습니다.

해결책 : 컬렉션을 사용하십시오.

중간에서 추가 / 삭제할 계획이라면 LinkedList를 사용하세요. 크기에 대해 정말로 걱정하거나 컬렉션 중간에 인덱스를 자주 사용하는 경우 ArrayList를 사용하십시오. 둘 다 삭제 작업이 있어야합니다.

이유 : 크기에 대해 걱정하거나 메모리 할당을 제어하려는 경우

솔루션 : 특정 초기 크기로 ArrayList를 사용하십시오.

ArrayList는 단순히 자체적으로 확장 할 수있는 배열이지만 항상 그렇게 할 필요는 없습니다. 항목을 추가 / 제거하는 것은 매우 현명하지만 중간에서 LOT를 삽입 / 제거하는 경우에는 LinkedList를 사용하십시오.

이유 : 배열이 들어오고 나가는 배열이 있으므로 배열에서 작업하고 싶습니다.

솔루션 : 그것을 ArrayList로 변환하고, 항목을 삭제하고 다시 변환하십시오.

이유 : 스스로하면 더 나은 코드를 작성할 수 있다고 생각합니다.

솔루션 : 할 수 없습니다, 배열 또는 연결된 목록을 사용할 수 있습니다.

이유 : 이것은 수업 과제이며 허용되지 않거나 어떤 이유로 컬렉션 API에 액세스 할 수 없습니다.

가정 : 새 배열이 올바른 "크기"여야합니다.

솔루션 : 배열에서 일치하는 항목을 스캔하고 개수를 세십시오. 올바른 크기 (원래 크기-일치 수)의 새 배열을 만듭니다. System.arraycopy를 반복해서 사용하여 유지하려는 각 항목 그룹을 새 배열에 복사합니다. 이것이 클래스 할당이고 System.arraycopy를 사용할 수없는 경우 루프에서 한 번에 하나씩 수동으로 복사하지만 훨씬 느리기 때문에 프로덕션 코드에서는이 작업을 수행하지 마십시오. (이 솔루션은 모두 다른 답변에 자세히 설명되어 있습니다)

이유 : 베어 메탈을 실행해야합니다.

가정 : 불필요하게 공간을 할당하거나 너무 오래 걸리지 않아야합니다.

가정 : 배열에 사용 된 크기 (길이)를 별도로 추적하고 있습니다. 그렇지 않으면 삭제 / 삽입을 위해 배열을 재 할당해야하기 때문입니다.

이 작업을 수행하려는 이유의 예 : 단일 기본 요소 배열 (int 값이라고 가정 해 보겠습니다)이 숫양의 상당 부분을 차지합니다 (예 : 50 %)! ArrayList는 이들을 메모리 양의 몇 배를 사용하는 Integer 객체에 대한 포인터 목록으로 강제합니다.

솔루션 : 배열을 반복하고 제거 할 요소를 찾을 때마다 (요소 n이라고합시다) System.arraycopy를 사용하여 "삭제 된"요소 위에 배열의 꼬리를 복사합니다 (소스와 대상은 동일한 배열). 메모리가 자체를 덮어 쓰지 않도록 올바른 방향으로 복사 할 수있을만큼 똑똑합니다.

 System.arraycopy (ary, n + 1, ary, n, 길이 -n) 
 길이--;

한 번에 둘 이상의 요소를 삭제하는 경우 이보다 더 똑똑해지기를 원할 것입니다. 전체 꼬리가 아니라 하나의 "일치"와 다음 "일치"사이에서만 영역을 이동하고 항상 그렇듯이 청크를 두 번 이동하지 마십시오.

이 마지막 경우에는 반드시 직접 작업을 수행해야하며 System.arraycopy를 사용하는 것은 컴퓨터 아키텍처를 위해 메모리를 이동하는 가장 좋은 방법을 선택할 것이기 때문에 실제로 수행 할 수있는 유일한 방법입니다. 합리적으로 직접 작성할 수있는 코드보다


2

초기 배열

   int[] array = {5,6,51,4,3,2};

인덱스 2 인 51을 제거하려면 다음을 사용하십시오.

 for(int i = 2; i < array.length -1; i++){
    array[i] = array[i + 1];
  }

1

편집하다:

배열에 널이있는 지점이 지워졌습니다. 내 의견에 대해 죄송합니다.

실물:

음 ... 라인

array = list.toArray(array);

제거 된 요소가 null 인 배열의 모든 간격을 바꿉니다 . 요소가 제거 되었기 때문에 위험 할 수 있지만 배열의 길이는 동일하게 유지됩니다!

이를 방지하려면 toArray ()의 매개 변수로 새 Array를 사용하십시오. removeAll을 사용하지 않으려면 Set이 대안이 될 것입니다.

        String[] array = new String[] { "a", "bc" ,"dc" ,"a", "ef" };

        System.out.println(Arrays.toString(array));

        Set<String> asSet = new HashSet<String>(Arrays.asList(array));
        asSet.remove("a");
        array = asSet.toArray(new String[] {});

        System.out.println(Arrays.toString(array));

제공 :

[a, bc, dc, a, ef]
[dc, ef, bc]

현재 Chris Yester Young의 답변은 다음과 같습니다.

[a, bc, dc, a, ef]
[bc, dc, ef, null, ef]

코드와 함께

    String[] array = new String[] { "a", "bc" ,"dc" ,"a", "ef" };

    System.out.println(Arrays.toString(array));

    List<String> list = new ArrayList<String>(Arrays.asList(array));
    list.removeAll(Arrays.asList("a"));
    array = list.toArray(array);        

    System.out.println(Arrays.toString(array));

null 값이 남지 않았습니다.


좋은 시도지만 시가는 없습니다. 게시물을 작성하기 전에 정확히이 주제에 대한 편집 내용을 게시했습니다. 따라서 귀하가 "기술적으로 정확"하더라도 사람들이 내 게시물을 옮길 수 있도록 노력하는 것에 감사하지 않습니다. 당신이 그것을 알아야한다고 생각했습니다.
Chris Jester-Young

포스트 변위가 아니라 오류와 위험한 코드를 피하는 것입니다. Greetz GHad
GHad

사람들이 내 게시물 (두 부록 포함) 전체를 읽으면 오류를 피할 수 있습니다. 사람들이 생각없이 코드를 잘라내어 붙여 넣기 만하면 얻을 수있는 모든 것을받을 자격이 있습니다. 프로그래머는 두뇌를 운동하기 때문에 자신이하는 일에 대해 보수를받습니다. [계속]
Chris Jester-Young

1
[계속] 해시를 사용하면 항목이 무질서해진다는 사실을 사람들이 인식하지 못하는 경우에도 코드가 "위험"합니다. 물론 생각하는 프로그래머는 이것을 알고 있지만, 사람들이 생각없이 잘라내어 붙여 넣기 때문에 내 코드를 위험하다고 부르면 당신의 코드를 똑같이 말하는 것이 정당합니다.
Chris Jester-Young

물론, 해시에 대해 맞습니다. 그리고 당신의 두 번째 편집에서 요점이 분명해 졌기 때문에 나는 이것을 너무 많이 읽었을 것입니다. 말했듯이 null 값과 중복이있는 배열을 피하고 싶었습니다. 두 번째 편집에 따라 코드를 변경하고 배열에 대한 주석을 Edit3에 남길 수 있습니다. 당신을 공격하고 싶지 않았다
GHad

1

이 문제에 대한 나의 작은 공헌.

public class DeleteElementFromArray {
public static String foo[] = {"a","cc","a","dd"};
public static String search = "a";


public static void main(String[] args) {
    long stop = 0;
    long time = 0;
    long start = 0;
    System.out.println("Searched value in Array is: "+search);
    System.out.println("foo length before is: "+foo.length);
    for(int i=0;i<foo.length;i++){ System.out.println("foo["+i+"] = "+foo[i]);}
    System.out.println("==============================================================");
    start = System.nanoTime();
    foo = removeElementfromArray(search, foo);
    stop = System.nanoTime();
    time = stop - start;
    System.out.println("Equal search took in nano seconds = "+time);
    System.out.println("==========================================================");
    for(int i=0;i<foo.length;i++){ System.out.println("foo["+i+"] = "+foo[i]);}
}
public static String[] removeElementfromArray( String toSearchfor, String arr[] ){
     int i = 0;
     int t = 0;
     String tmp1[] = new String[arr.length];     
         for(;i<arr.length;i++){
              if(arr[i] == toSearchfor){     
              i++;
              }
             tmp1[t] = arr[i];
             t++;
     }   
     String tmp2[] = new String[arr.length-t];   
     System.arraycopy(tmp1, 0, tmp2, 0, tmp2.length);
     arr = tmp2; tmp1 = null; tmp2 = null;
    return arr;
}

}


훌륭한 테스트 코드가 실제보다 훨씬 크게 보이 긴하지만 이것은 정말 좋은 대답입니다. 전체 솔루션은 단일 라인 어레이 카피가 될 수 있습니다 (컬렉션 대신 어레이를 사용하는 금속에 가깝게 작업하는 경우 수행하려는 것과 동일한 어레이를 사용한다고 가정).
Bill K

감사합니다. 독자가 내부에서 일어나는 일을 조금보고 테스트 할 수 있도록 작성했습니다. 이제 다시 살펴 봅니다 System.arraycopy (tmp1, 0, tmp2, 0, tmp2.length); 제거되고 for (i = 0; i <(arr.length-t); i ++) {tmp2 [i] = tmp1 [i]; } 또한 64 비트 시스템에서 바이트 버퍼를 만들고 한 번에 8 바이트를 복사하여 추가 복사 성능을 얻을 수 있습니다.
Andre

0

"제거"의 의미에 따라 다릅니다. 배열은 크기가 고정 된 구조입니다. 배열의 요소 수를 변경할 수 없습니다. 따라서 a) 원하지 않는 요소없이 더 짧은 새 배열을 만들거나 b) 원하지 않는 항목을 '빈'상태를 나타내는 항목에 할당 할 수 있습니다. 기본 요소로 작업하지 않는 경우 일반적으로 null입니다.

첫 번째 경우 배열에서 목록을 만들고 요소를 제거하고 목록에서 새 배열을 만듭니다. 성능이 중요한 경우 목록에서 제거해서는 안되는 요소를 할당하는 배열을 반복 한 다음 목록에서 새 배열을 만듭니다. 두 번째 경우에는 단순히 진행하여 배열 항목에 null을 할당합니다.


0

아, 코드가 제대로 표시되지 않습니다. 죄송합니다. 작동합니다. 다시 한번 죄송합니다. 질문을 제대로 읽지 못한 것 같습니다.

String  foo[] = {"a","cc","a","dd"},
remove = "a";
boolean gaps[] = new boolean[foo.length];
int newlength = 0;

for (int c = 0; c<foo.length; c++)
{
    if (foo[c].equals(remove))
    {
        gaps[c] = true;
        newlength++;
    }
    else 
        gaps[c] = false;

    System.out.println(foo[c]);
}

String newString[] = new String[newlength];

System.out.println("");

for (int c1=0, c2=0; c1<foo.length; c1++)
{
    if (!gaps[c1])
    {
        newString[c2] = foo[c1];
        System.out.println(newString[c2]);
        c2++;
    }
}

0

인덱스 i가있는 요소를 제외한 모든 요소를 ​​복사합니다.

if(i == 0){
                System.arraycopy(edges, 1, copyEdge, 0, edges.length -1 );
            }else{
                System.arraycopy(edges, 0, copyEdge, 0, i );
                System.arraycopy(edges, i+1, copyEdge, i, edges.length - (i+1) );
            }

0

같은 문자열 배열에서

String name = 'abcdeafbde'// 다음과 같을 수 있음 String name = 'aa bb cde aa f bb de'

나는 다음 수업을 만든다.

class clearname{
def parts
def tv
public def str = ''
String name
clearname(String name){
    this.name = name
    this.parts = this.name.split(" ")
    this.tv = this.parts.size()
}
public String cleared(){

        int i
        int k
        int j=0        
    for(i=0;i<tv;i++){
        for(k=0;k<tv;k++){
            if(this.parts[k] == this.parts[i] && k!=i){
               this.parts[k] = '';
                j++
            }
        }
    }
    def str = ''
    for(i=0;i<tv;i++){
        if(this.parts[i]!='')

           this.str += this.parts[i].trim()+' '
    } 
    return this.str    
}}



return new clearname(name).cleared()

이 결과 얻기

abcdef

이 코드가 누구에게나 도움이되기를 바랍니다.


0

요소의 순서가 중요하지 않은 경우. foo [x]와 foo [0] 요소를 교체 한 다음 foo.drop (1)을 호출 할 수 있습니다.

foo.drop(n) 배열에서 첫 번째 요소 (n) 개를 제거합니다.

나는 이것이 가장 간단하고 자원 효율적인 방법이라고 생각합니다.

추신 : indexOf여러 가지 방법으로 구현할 수 있습니다. 이것이 제 버전입니다.

Integer indexOf(String[] arr, String value){
    for(Integer i = 0 ; i < arr.length; i++ )
        if(arr[i] == value)
            return i;         // return the index of the element
    return -1                 // otherwise -1
}

while (true) {
   Integer i;
   i = indexOf(foo,"a")
   if (i == -1) break;
   foo[i] = foo[0];           // preserve foo[0]
   foo.drop(1);
}

-3

사용하다:

list.removeAll(...);
//post what char you need in the ... section

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.