2017-02-07 2 views
0

문자열 배열에서 복제본을 제거하려고하는데 분할 문자열을 사용하여 배열에서 문자열을 얻은 다음 카운터 방법을 사용하여 중복 개수를 계산했습니다. 내가 잘못한 것을 이해하지 못한다.Java의 중복 문자열 배열

public class Program { 
public static void uniqWords(String s){ 
    String[] sentence = s.split(" "); 
    int[] counter = new int[sentence.length]; 
    for(int i=0; i< sentence.length; i++){ 
    for(int j=i+1; j<sentence.length; j++){ 
     if(sentence[i] == sentence[j]){ 
      counter[i] =1; 
     } 
    } 
    }// 
    for(int i=0; i<counter.length; i++){ 
     System.out.print(counter[i] + ","); 
    } 
    for(int i =0; i<sentence.length; i++){ 
    if(counter[i] == 1){ 
     sentence[i] = ""; 
     } 
    } 
//print 
    for(int i=0; i<sentence.length; i++){ 
     System.out.print(sentence[i]); 
     System.out.print(" "); 
    } 
    // 

    } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     uniqWords("Spring in in Paris"); 

    } 
} 
+0

당신은 실제로 아무 것도 세지 않습니다. 당신이 뭔가를 찾을 때마다 카운터를 "1"로 설정하고 있습니다. 또한 : 프로그램을 디버그하십시오. 이와 같은 오류를 발견하면 디버거가 필요합니다. Spoiler : 문자열을 java의''==''와 비교하지 마십시오. – f1sh

+0

@KevinEsche - 배열을 집합으로 변환 한 후 어떻게 문장을 재구성하겠습니까? 그 이후로 "중복 된 문장 *을 문장에서 제거하는 것"이 ​​수반 될 것입니다. –

+0

@MarkAdelsberger를 다시'String' 배열로 변환하면됩니까? – SomeJavaGuy

답변

5

가장 중요한 문제는 당신이 작동하지 않습니다 ==를 사용하여 두 개의 문자열 '값을 비교하기 위해 노력하고 있다는 점이다. 문자열 중 하나에서 equals() 메서드를 사용해야 다른 문자열과 비교할 수 있습니다.

+0

또한 stackoverflow에 게시 된 가장 일반적인 자바 실수 –

1

어레이를 세트로 변환한다. 세트는 중복을 허용하지 않기 때문에이 제거됩니다

String[] sentence = s.split(" "); 
    Set<String> set = new HashSet<String>(Arrays.asList(sentence)); 
+0

... 어느 쪽도 어느 쪽이 OP가 잘못했는지 또는 그들이하고 싶은 말을하지 않음. –

+3

OP : "내 문자열 배열에서 중복을 제거하려고합니다." 코드의 목적이 아닌 제거. – SCouto

+0

이것은 답변이 아니지만 개인적으로 도움이됩니다. 내가 그것을 읽 자마자, 나는 "oh duh!"라고 갔다. – toshiomagic