2012-07-27 7 views
0

문자열에서 특정 단어를 제거하는 방법을 알아내는 데 어려움이 있습니다. 기본적으로 String이 있습니다. 문자열의 모든 단어를 미리 배열 된 단어 수와 비교합니다. 문자열의 단어가 사전 설정된 단어 중 하나와 일치하면 해당 단어를 문자열에서 제거합니다. 내가 문자열을 가지고 예를 들어 문자열에서 특정 단어 제거

이 방법을 실행 한 후 나는 단어 배열해야한다 "테스트 문장"{ "테스트", "문장"} 여기에 내가 지금까지 ...

이 무엇

편집 은 기본적으로 문제는 아무것도 내가 끝낼, 변화 없다는 것입니다 { "이다", "A", "테스트", "문장"}

private void fillerWords(){ 

    String[] commonWords = {"the","of","to","and","a","in","is","it","you","that","he","was","for","on","are","with","as","i"}; 
    List <String>wordList = new ArrayList<String>(Arrays.asList(commonWords)); 

    //Split words in sentence up by word, put them into array 
    String s = "is a test sentance"; 
    String[] tArray = s.split(" "); 
    List <String>list = new ArrayList<String>(Arrays.asList(tArray));  

    //take out words 
    for(int i=0; i<list.size(); i++){ 
     //Check to see if a sentence word is a common word, if so remove word 
     for(int c=0; c<wordList.size(); c++){ 
      if(wordList.get(c) == list.get(i)){ 
       list.remove(i); 
      }//end if 
     }//end for 
    }//end for 


    for(int x=0; x<list.size(); x++){ 
     System.out.printf("%s %s \n", x, list.get(x)); 
    } 

} 

}

+0

을 당신은 단어 { "테스트"와 끝까지해야한다고 :

이 같은 당신의 비교 블록을 변경

: 또한

, 여기에 많은 변화없이 문제를 해결하는 간단한 방법 , "sentence"}하지만 실제로 끝내고있는 것은 무엇입니까? – Mercurybullet

+0

이 문제가 무엇입니까? 대략 말하면, 그것이 효과가있는 것처럼 보입니다. 그러나 내부 루프를 저장하기 때문에 더 나은 런타임 성능을 제공하는 Stopwords에 HashSet을 사용해야합니다. – Jochen

+0

내가 끝나는 것은 { "is", "test", "sentence"}입니다. 기본적으로 아무 것도 없습니다 – SNV7

답변

3

문제를 목록에서 색인 i를 제거한 다음 i를 증가시키는 것이므로 제거 할 때마다 색인을 건너 뛰는 것입니다. 어쩌면 출력이라는 또 다른 목록을 만들고, 나쁜 단어를 치면 "목록"에서 제거하는 대신 좋은 단어를 치면 "출력"에 추가하십시오.

또한 Failsafe에 따르면 "=="을 사용하여 문자열을 비교할 수 없으므로 비교하려면 string1.equals (string2)를 사용해야합니다.

if(wordList.get(c).equals(list.get(i))){ 
    list.remove(i); 
    i--; 
    break; 
} 
+0

여전히 문자열을 double =과 비교하고 있습니다. – Failsafe

+0

고마워, 내가 어떻게 그리워하는지 모르겠다. –

+0

고마워, 지금은 잘 작동 – SNV7

2

사용 removeAll() 요소를 제거 다른 컬렉션에 존재합니다.

list.removeAll(wordlist) 

wordlist에 존재 list에서 모든 요소를 ​​제거합니다.

(코드도 작동해야하지만이 짧은 방법입니다.)

2

당신은 당신이해야 할

if(wordList.get(c) == list.get(i)){ 
      list.remove(i); 
     }//end if 

와 문자열을 비교할 수 없습니다 :

if(wordList.get(c).equals(list.get(i))){ 
      list.remove(i); 
     }//end if 
0
String regex; 
    regex = "\\s*\\bword\\b\\s*";//word must to be removed. 
    while(out.contains("word")) 
    out = out.replaceAll(regex, "");//out if input String and finnaly is out.. 
+0

이 방법은 나를 위해 일했다 :) –

+1

이 코드는 _how_ 및/또는 _why_에 관한 추가 컨텍스트를 제공하는 동안 해결할 수 있지만 문제는 답안의 장기적인 가치를 향상시킬 것입니다. –

+0

들어있는 단어를 제거하는 것은 유용하지 않습니다. ";" 또는 ","또는 ... –