С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
1

Поиск нескольких символов через indexOf

04.11.2014, 00:29. Просмотров 907. Ответов 17
Метки нет (Все метки)

кусок кода рабочий

Java
1
2
private void processSMS(String paramString) {
        int i = paramString.indexOf('д');
но как только добавляю ещё один символ перестаёт работать и не компилируется
Java
1
2
private void processSMS(String paramString) {
        int i = paramString.indexOf('дД');
ЧТо можно сделать? мне нужно что бы искало несколько символов, а не один.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2014, 00:29
Ответы с готовыми решениями:

Не работает цик(или indexOf()
Суть кода ниже в том, чтобы находить в строке сочетания символов "ccc" и в них...

indexOf и анализ строки символов
Нужно подсчитать количество слов в вводимой строке и количество слов...

IndexOf поиск
Я чето не совсем понял IndexOf он только целые строки ищет? Возьмем простой...

Получение нескольких записей через поиск
Добрый день! Есть база на Access к которой подключаюсь через ADO. Нужно...

Символ не ищется в строке через IndexOf
Дорогие друзья, есть строка которую надо обработать, но он почему то не ищет...

17
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
04.11.2014, 12:50 2
walkover, а что, нынче строки выделяются апострофами? В апострофах выделяются только отдельные символы. Используйте кавычки.
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
11.11.2014, 21:39  [ТС] 3
проблема в том что я пробовал использовать кавычки! это самое первое, что мне пришло в голову, всё бы нечего, но не работает

Добавлено через 2 часа 2 минуты
в общем я маленько не правильно указал, после дД есть пробел, тобишь "дД " получается что не видит пробел, копирует сразу после "дД" а надо что бы копировала после "дД ", как сделать?
например дД полез5678, надо что бы скопировало "полез56" но оно копирует " полез5" как можно убрать пробел?
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
12.11.2014, 09:35 4
walkover, если вы используете substring, то первый аргумент просто увеличьте на 1.

Добавлено через 19 секунд
Либо используйте метод trim.
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
12.11.2014, 12:52  [ТС] 5
Цитата Сообщение от CoolMind Посмотреть сообщение
walkover, если вы используете substring, то первый аргумент просто увеличьте на 1.
Добавлено через 19 секунд
Либо используйте метод trim.
Javascript
1
2
3
message = paramString.substring(i + 1, i + 8);
                    Log.d("SMSBroadcastReceiver", message);
                    sendSMS(telephoneDirector, message);
вот так у меня, первый аргумент пробовал увеличить на 1, не чего не вышло, всё тоже самое. А так применить метод trim?
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
12.11.2014, 13:27 6
walkover, честно говоря, из кода не видно, какая строка была на входе и какой стала. Вроде, метод trim применяется просто (он отбрасывает конечные пробелы): messsage = paramString.substring(i + 1, i + 8).trim();
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 13:28 7
walkover, не понятно что есть, и что должно получится)
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
12.11.2014, 13:41  [ТС] 8
Цитата Сообщение от CoolMind Посмотреть сообщение
messsage = paramString.substring(i + 1, i + 8).trim();
вооо, спасибо))) а я даже и не думал что туда его надо, слушай, а он отбрасывает только конечные пробелы или впереди тоже? проблема в том что мне нужно убрать пробел перед нужными символами, к примеру " стр01" нужно что бы отправляло "стр01" без пробела впереди.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 13:44 9
walkover,
Java
1
2
String paramString = "    стр01   ";
String message = paramString.replaceAll(" ", "");// "стр01"
И всё, все пробелы исчезнут.
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
12.11.2014, 13:50 10
walkover, да, trim отбрасывает и начальные, и конечные пробелы. Если это то, что вам требуется, конечно. Но вы же легко можете попробовать.

Добавлено через 1 минуту
http://www.tutorialspoint.com/java/java_string_trim.htm
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
12.11.2014, 14:04  [ТС] 11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
walkover,
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
String paramString = " * *стр01 * ";
String message = paramString.replaceAll(" ", "");// "стр01"
И всё, все пробелы исчезнут.
Да там дело в том, что прога ищет допустим слово "стр01" и копирует допустим 7 символов после него, если проще то есть фраза стр01 1234567890, надо просто что бы она искала слово стр01 и копировала после него 7 символом 1234567, а она копирует пробел+123456, вот я и подумал, что надо что бы она копировала 8 символов, тобишь пробел+1234567 и в итоге уберала пробел и отправляла только 1234567 без пробела. trim так сделает же да? если просто сделать messsage = paramString.substring(i + 1, i + 8).trim(); . Я просто щас проверить не могу, нет доступа к эклипсу с исходником.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 14:19 12
Если правильно вас понял - я бы сделал так:

Java
1
2
3
4
5
6
7
8
9
10
11
String paramString = "стр01 1234567890 стр02 1234567890 стр03 1234567890";//Я так понимаю исходный файл
        String delimiter = " ";
        String key = "стр01";
        String message;
        String[] paramStringArray = paramString.split(delimiter);
        
        for(int i = 0; i < paramStringArray.length; i++){
            if(paramStringArray[i].equals(key)){
                message = paramStringArray[i + 1];
            }
        }
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
12.11.2014, 14:21 13
walkover, понятно. Тут 2 варианта. Либо вы находите сначала позицию "стр01", затем находите позицию пробела, отсчитывая от позиции "стр01" (это плохой вариант), либо вы находите позицию "стр01" и прибавляете к ней "стр01".length() + 1, т.к. вы ещё исключаете один пробел. В общем, не с той позиции подстроку искали.
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
12.11.2014, 14:52  [ТС] 14
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Если правильно вас понял - я бы сделал так:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
String paramString = "стр01 1234567890 стр02 1234567890 стр03 1234567890";//Я так понимаю исходный файл
* * * * String delimiter = " ";
* * * * String key = "стр01";
* * * * String message;
* * * * String[] paramStringArray = paramString.split(delimiter);
for(int i = 0; i < paramStringArray.length; i++){
* * * * * * if(paramStringArray[i].equals(key)){
* * * * * * * * message = paramStringArray[i + 1];
* * * * * * }
* * * * }
число 1234567890 постоянно разные, тобишь 454353459349 или 457545467546 и т.д.

Добавлено через 1 минуту
Цитата Сообщение от CoolMind Посмотреть сообщение
walkover, понятно. Тут 2 варианта. Либо вы находите сначала позицию "стр01", затем находите позицию пробела, отсчитывая от позиции "стр01" (это плохой вариант), либо вы находите позицию "стр01" и прибавляете к ней "стр01".length() + 1, т.к. вы ещё исключаете один пробел. В общем, не с той позиции подстроку искали.
очень интересно)))) вот так и попробую, ну и ещё попробую что бы тупо убирало пробелы. отпишу о результате.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 15:03 15
Цитата Сообщение от walkover Посмотреть сообщение
число 1234567890 постоянно разные, тобишь 454353459349 или 457545467546 и т.д.
Это не важно. Все нормально отработает.
0
walkover
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 7
12.11.2014, 16:56  [ТС] 16
"стр01".length() + 1 - это не работает вообще((((
после добавления trim стало копировать вообще 01 12345)))))

буду пробовать последний вариант

Добавлено через 55 минут
как вставить код
Java
1
2
3
4
5
6
7
8
9
10
11
String paramString = "стр01 1234567890 стр02 1234567890 стр03 1234567890";//Я так понимаю исходный файл
        String delimiter = " ";
        String key = "стр01";
        String message;
        String[] paramStringArray = paramString.split(delimiter);
        
        for(int i = 0; i < paramStringArray.length; i++){
            if(paramStringArray[i].equals(key)){
                message = paramStringArray[i + 1];
            }
        }
в мой код? вот весь кусок кода как есть сейчас. не работает, вернее копирует хрен пойми как, логику вообще не улавливаю.
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
private void processSMS(String paramString) {
        int i = paramString.indexOf("стр01");
        Log.i("SMSBroadcastReceiver", "paramString = " + paramString);
        String message;
        if (i != -1) {
            if (paramString.length() < 6 + (i + 1))
                Toast.makeText(this, "После @ меньше 6 символов",
                        Toast.LENGTH_LONG).show();
            else {
                try {
                    message = paramString.substring(i + 1, i + 6).trim();
                    Log.d("SMSBroadcastReceiver", message);
                    sendSMS(telephoneDirector, message);
                } catch (IndexOutOfBoundsException e) {
                    // TODO: handle exception
                    Log.d("SMSBroadcastReceiver",
                            "Something wrong with this county..."
                                    + e.getMessage());
                }
            }
 
        }
 
    }
копирует так при это коде 01пробел12
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,734
12.11.2014, 17:03 17
walkover, чтобы у вас не возникало вопросов, возьмите ручку и лист бумаги.
Аккуратно проделайте отладку или просто вставьте в нужные места Log.i, а затем поглядите в LogCat (в режиме Info) полученные сообщения. В Log.i выводите значения переменных. Затем возьмите ручку и поглядите, в какой позиции стоит какой символ, что вы в итоге хотите откуда скопировать.
Можно наловчиться и сделать это даже без отладки.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
12.11.2014, 17:11 18
walkover, попробуйте такой код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void processSMS(String paramString) {
        
        String key = "стр01";
        Log.i("SMSBroadcastReceiver", "paramString = " + paramString);
        String message = "";
        String delimiter = " ";
        String[] paramStringArray = paramString.split(delimiter);
        
        for(int i = 0; i < paramStringArray.length; i++){
            
            if(paramStringArray[i].equals(key)){
                message = paramStringArray[i + 1];
            }
            
        }
        
        
        Log.d("SMSBroadcastReceiver", message); 
        sendSMS(telephoneDirector, message);
 
    }
0
12.11.2014, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2014, 17:11

Как найти много текста через IndexOf?
Вот например почитав про этот метод что он ищет с 0вого индекса первое...

Какой из методов рациональнее использовать: Array.prototype.indexOf() или String.prototype.indexOf()
функции передаётся буква алфавита в нижнем регистре и она должна вернуть...

Обращение через индекс Dictionary или IndexOf, что быстрее / производительнее?
Смотрите есть строка: string dic = &quot;abcdefghijklmnopqrstuvwxyz&quot;; мне...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru