@My1Name

Как сказать «ничего не делаем» используя условные операторы?

Есть некоторый цикл в котором нужно проверить имена файлов и, в случае совпадения, указать "ничего не делаем":
String imgName;
for(byte i=0; i<arrayImages.size();i++) {
imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
if (imgName.indexOf("s-1.")!=-1 || imgName.indexOf("s-2.")!=-1 || 
    imgName.indexOf("s-3.")!=-1 || imgName.indexOf("s-4.")!=-1) {
	// ничего не делаем 
}
else if (imgName.isBlank())
   removeSlide(i);
else {
	imgName = setCorrectName(imgName, i);
	if (imgName!=null) {
     // что-то делаем
        }
}

Как это написать правильно?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
несколько проверок с indexOf() можно заменить на одну imgName.matches(/s-[1-4]\./),

условие isBlank() лучше ставить первым

пустой блок если нужен для брейкпоинта, можно там поставить строчку assert true;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
@nApoBo3
Continue

Но вообще считается "дурным" тоном использовать не "основное" поведение внутри if.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
в случае совпадения, указать "ничего не делаем"

Реверсируйте условие и ничего не делайте в случае НЕсовпадения, т.е. в ELSE. Которое в этом случае можно вообще не писать.
Ответ написан
Комментировать
@WaterSmith
Android-разработчик. Java, Kotlin
String imgName;

for(byte i=0; i<arrayImages.size();i++) {
	
	imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
	
	if (!(imgName.contains("s-1.") || imgName.contains("s-2.") || 
		imgName.contains("s-3.") || imgName.contains("s-4."))) {
			if (imgName.isBlank())
				removeSlide(i);
			else {
				imgName = setCorrectName(imgName, i);
				if (imgName!=null) {
					// что-то делаем
				}
			}
	}
	// ничего не делаем 
}


и если бы сделать так, что setCorrectName не будет возвращать null (как вообще функция с таким именем может это сделать?) то еще оду проверку можно выкинуть.
Ответ написан
xez
@xez Куратор тега Java
TL Junior Roo
1. Можно вообще ничего не писать.
2. Можно написать continue; но в этом нет необходимости
3. Лучше всего вообще не использовать циклы:
arrayImages.stream()
                .map(arrayImage -> arrayImage.getOriginalFilename().toLowerCase())
                .filter(imgName -> !imgName.matches(".*s-1\\..*|.*s-2\\..*|.*s-3\\..*|.*s-4\\..*")
                .forEach(imgName -> {
                    // Что-то делаем
                    if (imgName.isBlank())
                       // removeSlide(i);
                    else {
                       // imgName = setCorrectName(imgName, i);
                       // if (imgName!=null) {
                            // что-то делаем
                       // }
                    }
                });
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
String imgName;
for (byte i = 0; i < arrayImages.size(); i++) {
  imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
  if (imgName.isBlank())
    removeSlide(i);
    continue;
  }
  if (imgName.matches(".*s-[1-4]\\..*")) {
    continue;
  }
  imgName = setCorrectName(imgName, i);
  if (imgName == null) {
    continue;
  }
  // что-то делаем
}
Ответ написан
@My1Name Автор вопроса
Только так:
String imgName;
for(byte i=0; i<arrayImages.size();i++) {
imgName = arrayImages.get(i).getOriginalFilename().toLowerCase();
if (imgName.isBlank())
    removeSlide(i);
else if (imgName.indexOf("s-1.")!=-1 || imgName.indexOf("s-2.")!=-1 ||
         imgName.indexOf("s-3.")!=-1 || imgName.indexOf("s-4.")!=-1) {
	 assert true; // file exists. Nothing to do.
	}
else {
 	imgName = setCorrectName(imgName, i);
	if (imgName!=null) {
       // some code...
        }
}

Пробовал разные варианты из ответов... Хотел заменить indexOf() на регулярное выражение matches но оно ни в какую не хочет корректно работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽