2017-03-14 26 views
-2
import java.util.ArrayList; 
import java.util.Arrays; 

public class Test20{ 

    public static void main(String args[]){ 
    String str="Hello java Hello python Hello testing Hello java"; 
    ArrayList<String> list=new ArrayList<String>(); 
    String s[]=str.split(" "); 

    String p=s[0]; 
    list.add(p); 

    for(int i=1;i<s.length;i++){ 

     if(!(p==s[i])){ 
     list.add(s[i]); 
     } 
     p=s[i]; 
    }//i 

    for(int i=0;i<list.size();i++){ 
     System.out.println(list.get(i)); 
    } 
    } 
} 

我想要得到這樣的結果:程序從字符串中獲取唯一的單詞?爲什麼打印所有單詞

Hello 
java 
python 
testing 
+0

請記住,您不能使用'=='比較Java中的字符串。你必須使用'.equals()'。 –

+0

這不是什麼真正重要的東西,但只是閱讀:http://stackoverflow.com/questions/129178/difference-between-int-array-and-int-array –

+0

爲什麼不只是實現一個'設置'接口?消除重複來幾乎免費。 – KodeSeeker

回答

1

您可以只使用ArrayListcontains方法。

for (int i = 1; i < s.length; i++) { 
    if (!(list.contains(s[i]))) { 
     list.add(s[i]); 
    } 
} 

編輯:而且也沒有必要爲第一個字做了特殊處理。您只需在索引0處啓動for循環,並省略循環上方的兩行。

+0

感謝guyzzz @CocoNess –

+0

thnkss ................ –

1

List s(包括ArrayList)允許重複。

爲了避免他們,你既可以使用contains方法加入之前檢查...

if (!list.contains(s[i])) { 
    list.add(s[i]); 
} 

...或使用替代Set(如HashSet),其隱含丟棄重複的條目。

0

解決方案中的邏輯錯誤。你只是比較相鄰的單詞。相反,你需要檢查它是否出現在列表中,或者你可以使用HashSet來獲得唯一的。

String s[] = str.split(" "); java.util.Set result = new java.util.HashSet(java.util.Arrays.asList(s)); System.out.println(result);

1

這裏是我的解決方案。使用Set並讓Java爲您完成所有工作。

public static void main(String args[]){ 

    String str="Hello java Hello python Hello testing Hello java"; 
    Set<String> myset=new HashSet<>(); 
    String s[]=str.split(" "); 

    for(int i=1;i<s.length;i++){ 

      myset.add(s[i]); 

    } 

    for (String sss: myset){ 

     System.out.println(sss); 

    } 
} 

} 
0

如果你想使用自己的實現(提供的那些更清潔),併爲你的例子打印唯一的單詞。

,你只需要刪除此行:

for(int i=1;i<s.length;i++){ 

     if(!(p==s[i])){ 
     list.add(s[i]); 
     } 
     p=s[i]; // REMOVE 
    }//i 

,如果你是不斷變化的p,這在你的代碼是爲你好,總是重複的話,檢查行不通。這不會在所有字符串中找到重複項,只是您的示例字符串。

相關問題