2015-02-16 1 views
0

У меня есть HashSet<String>, который заполнен строками, называемыми shingles (если вы возьмете строку «Fizzbuzz» и разделите ее на черепицу, вы получите «Fi», «iz», «zz», zb "," bu "," uz "," zz ". Не важно, но вот что такое галька в этом контексте).ClassCastException при итерации по HashSet

Я пытаюсь вернуть строку содержимого HashSet с помощью следующей методике:

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

    return shingles; 
} 

The 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)); 
    } 
} 

EDIT: Вот minmal, complete, verifiable example:

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; 
} 

}

+0

Что такое 'this.shingles', определяется ли он как коллекция' Objects'? – BatScream

+0

Пожалуйста, создайте [минимальный тестовый сценарий] (http://stackoverflow.com/help/mcve). –

+0

Каков тип возврата getShingles? – immibis

ответ

0

Ошибка здесь:

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

Эта линия добавляет два символа вместе. Не конкатенировать их.

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

Усиливает правильную семантику.

+0

Это сделало это, спасибо! – SELame