簡體   English   中英

迭代HashSet時出現ClassCastException

[英]ClassCastException when iterating over HashSet

我有一個HashSet<String> ,里面裝滿了叫做shingles的字符串(如果你把字符串“Fizzbuzz”打成碎片,你會得到“Fi”,“iz”,“zz”,“zb”,“bu” “,”“uz”,“zz”。不重要,但在這種背景下,這就是一塊木瓦。

我試圖通過以下方法返回HashSet內容的字符串:

public String getShinglesAsString() {
    String shingles = "";
    for (String shingle : this.shingles) {
        shingles += shingle + " ";
    }

    return shingles;
}

for (String shingle : this.shingles)拋出了ClassCastException。 特定消息是Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.CharSequence

我也嘗試過使用Iterator對象,我也遇到了同樣的問題。 這是我的代碼,用於從提供給構造函數的字符串生成帶狀皰疹:

// Will generate a new set of shingles based on sentence
public void generateShingles() {
    shingles = new HashSet<>();

    for (int i=0; i<getSentence().length()-1; i++) {
        getShingles().add(getSentence().charAt(i) + getSentence().charAt(i+1));
    }
}

編輯:這是最簡單,完整,可驗證的例子:

public class SentenceWithShingles {
private String sentence;
private Set<String> shingles;

// Constructor
public SentenceWithShingles(String sentence) {
    this.sentence = sentence;
    generateShingles();
}

// Will generate a new set of shingles based on sentence
public void generateShingles() {
    shingles = new HashSet<>();

    for (int i=0; i<getSentence().length()-1; i++) {
        getShingles().add(getSentence().charAt(i) + getSentence().charAt(i+1));
    }
}

public void setSentence(String sentence) {
    this.sentence = sentence;
}

public Set getShingles() {
    return shingles;
}

public String getShinglesAsString() {
    String shingles = "";
    for (String shingle : this.shingles) {
        shingles += shingle + " ";
    }

    return shingles;
}

}

錯誤在這里:

getShingles().add(getSentence().charAt(i) + getSentence().charAt(i+1));

該行將兩個字符加在一起。 沒有連接它們。

getShingles().add(getSentence().charAt(i) + "" + getSentence().charAt(i+1));

將強制正確的語義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM