Страницы

Поиск по вопросам

среда, 9 января 2019 г.

Как спарсить String?

Есть String path = "/storage/emulated/0/Android"; Как убрать все что находится после последнего "/" ? Будь то "/Android" или что то иное...


Ответ

Используйте lastIndexOf:
if (null != str && path.length() > 0 ) { int endIndex = path.lastIndexOf("/"); if (endIndex != -1) { String newstr = path.substring(0, endIndex); // not forgot to put check if(endIndex != -1) } } Либо в кратце:
String whatyouaresearching = path.substring(0, path.lastIndexOf("/")); Либо можете использовать apache.commons.lang.StringUtils.substringBeforeLast(str, separator)
StringUtils.substringBeforeLast(path, "/")
Пример на ideone
Источник.

Зачем нужны функции setjmp longjmp?

Здравствуйте, Этот вопрос остается не освещенным в учебниках по программированию на языкe С. Было бы интересно знать, зачем и как применяют функции setjmp и longjmp. Если возможно то приведите, какой нибудь, пример их использования. Спасибо.


Ответ

Пример использования longjmp из моей реальной жизни. Делал достаточно объёмную утилиту для тестирования железяки, которую мы производим. Там, в частности, был тест памяти. Требовалось, что бы тестирование выполнялось до нажатия Ctrl/C, после чего выполнялся переход на следуюий этап тестирования. Делал так:
// Задаём реакцию на нажатие комбинации клавиш Сtrl/C signal(SIGINT, sig_sigint); . . . // Перед началом цикла запоминаем положение: if (setjmp(jmpbuffer) != 0) { // Длинный переход из обработчика сигнала завершения printf("

Получен сигнал завершения работы
"); goto end_loop; } // Сам цикл тестирования do { . . . } while (do_work !=0); end_loop:
Таких этапов тестирования было несколько. И после каждого нажатия Ctrl/C программа переходила к СЛЕДУЮЩЕМУ этапу. Попробуйте сделать такое на try/catch! :-) И не надо говорить про оператор goto! В данном контексте, с переходом вперёд, его использование абсолютно уместно.

java как узнать по дате день недели?

java как узнать по дате день недели? Пример: 29.11.2016 нужно получить 29.11.2016 = "Вторник";


Ответ

Calendar c = Calendar.getInstance(); c.setTime(yourDate); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

Как убрать символ новой строки (\n) при чтении строк из файла

При использовании file.readlines() получаем что-то вроде этого:
>>> file.readlines() ['12
', '10
', '9
', '15
', '10
', '120']
Как убрать
?


Ответ

>>> l = ['12
', '10
', '9
', '15
', '10
', '120'] >>> l = [line.rstrip() for line in l] >>> l ['12', '10', '9', '15', '10', '120']

Универсальный контейнер: одновременно вектор, стек и очередь

Подскажите как правильно реализовать на С++ контейнер, который одновременно может работать как вектор (список), LIFO-стек и FIFO-очередь, максимально используя фичи STL "из коробки" ?
Применение: хочу универсальный тип-контейнер, который может не только хранить вложенные структуры (пока справляется class Obj { string val; vector nested; }), но и уметь специфичные для каждого перечисленного контейнера фичи одновременно
vector: произвольное чтение/вставка/замена по индексу stack: push/pop queue: put/get


Ответ

deque - он же double-ended queue
Поддерживает все, что вы перечислили. Названия функций-членов немного не такие, но это, думаю, не принципиально :) push_back, push_front - вставка с любого конца, pop_back, pop_front - снятие.
Словом, смотрите более детальное описание

Дружественный шаблонный класс

Почему gcc выдаёт ошибку?
[Error] specialization of 'template class A' must appear at namespace scope
template class A { template friend class A; };


Ответ

В С++ нет возможности использования частичной специализации для того, чтобы "очертить" только какое-то подмножество специализаций шаблона в качестве друзей.
14.5.4 Friends 8 Friend declarations shall not declare partial specializations. [ Example:
template class A { }; class X { template friend class A; // error };
—end example ]
То есть другом может быть либо шаблон (со всеми его специализациями), либо конкретная специализация (т.е полная специализация) шаблона.

Enum. Как определить, что значение перечисления не определено?

Как определить, что значение перечисления не определено? К примеру ,результат = 3
public enum ResultCode { Success, Error }


Ответ

Для определения того, что значение перечисления входит в список констант с указанными значениями применяется метод IsDefined
public ResultCode PerformAction() { int result = ResultCodeFromDataSource();
if (!Enum.IsDefined(typeof(ResultCode), result)) { throw new InvalidOperationException("Дружище, выход за диапазон"); }
return (ResultCode) result; }
Справочная информация: enum (Справочник по C#)