Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15

Iterator - how return set of string

04.05.2015, 15:57. Показов 2124. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребята, подскажите, как в итераторе из набора строк (hashset), найти и вернуть строки которые содержат определенную послед. символов, а если (chars) пустая строка или null то вернуть все строки.

код написал, метод contains применил, но где-то туплю.
Ткните носом пожалуйста.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
....
public Iterator<String> getStrContain(String chars) {
        Iterator<String> myIter = mySet.iterator();
        if (chars == null || chars == "") {
            //System.out.println("Chars is null or empty!");
            return myIter;
        } else {
            while(myIter.hasNext()){
              if(myIter.next().contains(chars.toLowerCase())) {
                  System.out.println("Chars is: " + chars);
                }
                myIter.next();
            }
 
        }
     return myIter;
    }
Добавлено через 10 минут
заполнил набор
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      
...
  sf.add("One");
        sf.add("Two");
        sf.add("Tree");
        sf.add("Four");
        sf.add("Four");
        sf.add(null);
        sf.add(null);
...
ищу последовательность 
sf.getStringsContaining("OnE");
....
 
ошибка Exception in thread "main" java.lang.NullPointerException в этой строке
...
 if(myIter.next().contains(chars.toLowerCase())) {
...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2015, 15:57
Ответы с готовыми решениями:

Map/set iterator not dereferencable
Всем доброго времени суток. Суть задания в том, чтобы удалить повторы комбинаций чисел в multimap'e. Проблема в том, что появляется данная...

map/set iterator not dereferencable
map&lt;string,int&gt; optimized(map&lt;string,int&gt;&amp;dict){ map&lt;string,int&gt;::iterator i=dict.begin(); map&lt;string,int&gt;::iterator j=dict.begin(); ...

Map/set iterator not dereferencable
Есть два класса, первый: class AnimationManager { public: String currentAim; std::map&lt;String, Animation&gt; animList; ...

18
15 / 15 / 3
Регистрация: 20.05.2014
Сообщений: 157
04.05.2015, 16:13
похоже, что myIter - null
только зачем возвращать из метода Iterator<String>?
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 16:23  [ТС]
а как вернуть строки?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
04.05.2015, 16:26
michael063, Положите все нужные строки в ArrayList и верните его.
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 16:30  [ТС]
знать бы как
0
15 / 15 / 3
Регистрация: 20.05.2014
Сообщений: 157
04.05.2015, 16:35
а что уже эксепшина нет?
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 16:56  [ТС]
Кто нибуть поможет по сабжу? конструктивно. а не отрывками фраз.

Добавлено через 7 минут
полный текст задания.
метод ищет и возвращает все строки содерж. указ. послед. символов. если chars пустая строка или null то вернуть все строки набора. chars - символы входящие в искомые строки. return строки содержащие указанную последовательность символов.

Добавлено через 6 минут
я вывожу весь сет в итераторе
Java
1
2
3
while(myIter.hasNext()){
                System.out.println(myIter.next());
}
null
two
tree
one
four

как проверить содержит ли каждая строка, указ. последовательность. нужно вывод итератора преобразовать во что-то чтолли? (другую коллекцию) или как вообще не понимаю.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
04.05.2015, 17:11
что ты прявязался к этому итератору?
что такое mySet ? если это есть тот самый херсет, то что тогда такое sf ? да еще и с методом add()
1
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 17:17  [ТС]
StringFilterImpl sf = new StringFilterImpl();
это сам класс.

Java
1
2
3
4
5
6
7
8
9
10
11
12
.....
  /**
     * Добавляет строку s в набор, приводя ее к нижнему регистру.
     * Если строка s уже есть в наборе, ничего не делает.
     * @param s может быть null
     */
    @Override
    public void add(String s) {
        if (s == null){ mySet.add(s);}
        else  mySet.add(s.toLowerCase());
    }
....
Java
1
2
3
4
5
6
7
8
public class StringFilterImpl implements StringFilter {
 
    public HashSet mySet = new HashSet<String>();
 
    public StringFilterImpl(){
 
    }
.......
Я просто тестирую свои методы в main()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
....
 public static void main (String[] args) throws ParseException {
 
        StringFilterImpl sf = new StringFilterImpl();
 
        //System.out.println(sf.mySet);
        //test removeA;;
        //sf.removeAll();
 
        //test getCollection
        //System.out.println(sf.getCollection()+ "\n" + "----------" );
 
        //test remove by id
        //System.out.println(sf.remove("onE"));
       // System.out.println(sf.getCollection());
 
 
        sf.add("One");
        sf.add("Two");
        sf.add("Tree");
        sf.add("Four");
        sf.add("Four");
        sf.add(null);
        sf.add(null);
 
        Iterator<String> iter = sf.mySet.iterator();
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
 
    }
....
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
04.05.2015, 17:28
Цитата Сообщение от michael063 Посмотреть сообщение
метод ищет и возвращает все строки содерж. указ. послед. символов. если chars пустая строка или null то вернуть все строки набора. chars - символы входящие в искомые строки. return строки содержащие указанную последовательность символов.
что за бред вообще
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 17:34  [ТС]
такое задание)
ок. напишу полно.

Метод ищет и возвращает все строки, содержащие указанную последовательность символов. Если chars - пустая строка или null, то результат содержит все строки данного набора.
@param chars символы, входящие в искомые строки (все символы, являющиеся буквами, в нижнем регистре.
@return строки, содержащие указанную последовательность символов.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
04.05.2015, 17:44
может быть я чего-то не понимаю
если требуется вернуть строкИ (множественное число), значит надо возвращать или сам HashSet не трогая (при chars == null), либо удалять из HashSet строки, в которых нет chars

получается одним сетом не обойтись и возвращать надо не итератор
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 17:47  [ТС]
ты правильно понимаешь)
Но как ты вернешь HashSet если метод

Java
1
 public Iterator<String> getString
возвращает Iterator<String>
, или что то не понимаю я(
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
04.05.2015, 18:05
если я правильно все понял
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Chars {
    public static void main(String[] args) {
        StringFilterImpl sf = new StringFilterImpl();
        sf.add("One");
        sf.add("Two");
        sf.add("Tree");
        sf.add("Four");
        sf.add("Four");
        sf.add(null);
        sf.add(null);
        HashSet<String> hashSet = sf.getStrContain("OnE");
        System.out.println(hashSet);
    }
}
 
class StringFilterImpl {
    public HashSet mySet = new HashSet<>();
 
    public HashSet<String> getStrContain(String chars) {
        if (chars == null || chars == "") return mySet;
        chars = chars.toLowerCase();
        HashSet<String> finded = new HashSet<>();
        Iterator<String> iter = mySet.iterator();
        while (iter.hasNext()) {
            String str = iter.next();
            if (str == null) continue;
            if (str.contains(chars)) finded.add(str);
        }
        return finded;
    }
 
    public void add(String s) {
        if (s == null) {
            mySet.add(s);
        } else mySet.add(s.toLowerCase());
    }
}
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
04.05.2015, 19:45  [ТС]
Класс StringFilterImpl реализует интерфейс implements StringFilter

В интерфейсе прописано так
Java
1
2
3
..
    Iterator<String> getStrContain(String chars);
..
ну и в классе естественно так:
Java
1
2
3
4
  @Override
    public Iterator<String> getStrContain(String chars) {
      ...
    }
думаю на HashSet нельзя будет заменить. Интерфейс не надо переписывать)

Добавлено через 1 час 24 минуты
Уточнение: Вот что еще написано в условии задачи)
"Реализовать класс объекта, который хранит набор строк (String), приведенных к нижнему регистру (в наборе не может быть двух одинаковых строк, но может быть null. Реализовать фильтрацию строк этого набора, т.е. возвращать итераторы с теми строками, которые удовлетворяют нескольким критериям"

Люди) как возвращать эти итераторы с нужными строками) дайте пример, пожалуйста.
0
1 / 1 / 1
Регистрация: 03.05.2015
Сообщений: 15
06.05.2015, 17:11  [ТС]
Ребята кому интересно, вот такой ответ) такое решение)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
public Iterator<String> getXXX(String begin) {
        Iterator<String> myIter = mySet.iterator();
        if (begin == null || begin.length() == 0) {
            return mySet.iterator();
        } else {
            HashSet<String> subSet  = new HashSet<String>(mySet.size());
            for (String s : mySet){
                if (s == null) continue;
                if (s.startsWith(begin.toLowerCase())){
                    subSet.add(s);
                }
            }
            return subSet.iterator();
        }
......
1
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 2
25.03.2016, 13:49
Ваш код ищет подстроку только с начала строки.
0
25.03.2016, 13:55

Не по теме:

Цитата Сообщение от dzyulia Посмотреть сообщение
Ваш код ищет подстроку только с начала строки.
а ваш поиск только темы годичной давности )

0
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 2
25.03.2016, 14:07
КОП, для меня актуально сейчас)) Кому-то понадобится
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Iterator<String> iterator = collection.iterator();
        if (chars == null || chars.isEmpty()) {
            return iterator;
        } else {
            HashSet<String> subSet = new HashSet<>(collection.size());
            while(iterator.hasNext()){
                String s=iterator.next();
                if (s == null) continue;
                if(s.contains(chars.toLowerCase())){
                    subSet.add(s);
                }
            }
 
            return subSet.iterator();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2016, 14:07
Помогаю со студенческими работами здесь

Map/set!( iterator not dereferencable)
Есть функция,в которой происходит поиск в map по ключу. Если по данному ключу нет значения, то необходимо провести интерполяцию двух...

Ошибка Expression: map/set iterator not dereferencable
Здравствуйте! Мне нужно вывести контейнер map в обратном порядке. Делаю следующим образом: for (multimap&lt;double, int&gt;::iterator i...

Ошибка в роботе с контейнером: set iterator not incrementable
Задание:Дано предложение.Какие большие и маленькие буквы с этих 'k','p','s','t','f','h','c' не содержатся в предложении. Обязательным...

Сравнение string::iterator со string::reverse_iterator
Уважаемые форумчане, подскажите пожалуйста, как можно сравнить string::iterator и string::reverse_iterator, в частности что бы определить,...

string iterator
Почему выдает ошибку при перемещение итератора на другую позицию? #include &lt;iostream&gt; #include &lt;string&gt; using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru