StringUtils

StringUtils от org.apache.commons.lang. Не пользовались, тогда пора !!

В этой статье мы расмотрим польщу от использования библиотеки StringUtils и маленький трик как избавиться от NullPointerException при проверки обьектов String. 

Для наглядности давайте расмотрим примеры кода:

public class StringUtilsExample {
protected Dog dog;
public class StringUtilsExample { protected Dog dog; class Dog{ String name; public Dog(String name){ this.name=name; } } public void createDog(String name){ this.dog = new Dog(name); } public static void main(String[] arg){

		StringUtilsExample exampleFirst = new StringUtilsExample();
		exampleFirst.createDog("Rrr");
		if(exampleFirst.dog.name.equals("Rrr")){
			System.out.println("true");
		}
		
		
		StringUtilsExample exampleSecond = new StringUtilsExample();
		exampleSecond.createDog(null);

		if(exampleSecond.dog.name.equals("Rrr")){ //NullPointerExecption
			System.out.println("true");
		}
		
		
		if(exampleSecond.dog.name !=null &&exampleSecond.dog.name.equals("Rrr")){ //all is ok
			System.out.println("true");
		}
		
		if("Rrr".equals(exampleSecond.dog.name) ){ //all is ok
			System.out.println("true");
		}
	}

}

Мы видим что у нас в примеры есть место которое выбрасывает ошибку NullPointerException. Ну ничего в следуещем примере мы добавили еще одну проверку на NULL и все кажется нормально.

Но в третем примере мы показили что можна избавиться от лишней проверки на NULL и поставить при проверке на первое место "Rrr" и тогда код короче и более приятен для чтения. 

Я советую всем взять этот пример на заметку. Конечно мы не проверяли на NULL обьект dog нашего экземпляра класса, но для примера это не важно. А Вы не забывайте про все места которые могут себя вести по разному))).

А теперь вернемся к StringUtils. Представте ситуацию что вы берете чето с БД и должны проверить не пустое ли там значение. На быструю руку мы пишем такой код

		StringUtilsExample exampleFirst = new StringUtilsExample();
		exampleFirst.createDog(" ");
		if(exampleFirst.dog.name.isEmpty()){
			System.out.println("true");
		}

 

Но оказывается БД у нас как всегда битая и там вместо пустого значения мы получаем пробелы "  ". И наша проверка не вернет true так как isEmpty вернет что там чето есть. Для таких случаев и нужна нам библиотечка StringUtils. С ее использованием мы получаем следующий код 

		if(StringUtils.isBlank(exampleFirst.dog.name)){
			System.out.println("true");
		}			

И тогда все нормально. За нас сделали проверку на " ". Одно из преимуществ что эта библиотечка делает работу безапасной на NULL. У нее много преимуществ. Некоторые методы я приведу сдесь:

  • IsEmpty/IsBlank - checks if a String contains text
  • Trim/Strip - removes leading and trailing whitespace
  • Equals - compares two strings null-safe
  • startsWith - check if a String starts with a prefix null-safe
  • endsWith - check if a String ends with a suffix null-safe
  • IndexOf/LastIndexOf/Contains - null-safe index-of checks
  • IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyBut - index-of any of a set of Strings
  • ContainsOnly/ContainsNone/ContainsAny - does String contains only/none/any of these characters
  • Substring/Left/Right/Mid - null-safe substring extractions
  • SubstringBefore/SubstringAfter/SubstringBetween - substring extraction relative to other strings
  • Split/Join - splits a String into an array of substrings and vice versa
  • Remove/Delete - removes part of a String
  • Replace/Overlay - Searches a String and replaces one String with another
  • Chomp/Chop - removes the last part of a String
  • LeftPad/RightPad/Center/Repeat - pads a String
  • UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalize - changes the case of a String
  • CountMatches - counts the number of occurrences of one String in another
  • IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable - checks the characters in a String
  • DefaultString - protects against a null input String
  • Reverse/ReverseDelimited - reverses a String
  • Abbreviate - abbreviates a string using ellipsis
  • Difference - compares Strings and reports on their differences
  • LevensteinDistance - the number of changes needed to change one String into another

Это наиболее часто встречаемые в использовании. Если Вам нужно больше информации все можно найти в doc. 

И в заключение. Знание библиотек делает Вашу работу и код более чистыми и приятными для чтения

 

comments powered by Disqus

Интересное

Стив Джобс о Mac OS X:
«Я убежден в том, что половина того что отделяет успешных предпринимателей от неудачников — это настойчивость.».
Марк Эллиот Цукерберг:
«Люди всегда немного скептически относятся к чему-то быстрорастущему, но им нужно просто взглянуть на то, что делается.».
Марк Эллиот Цукерберг:
"Множество конфиденциальных вещей намного проще держать в централизованной системе."
Стив Джобс о операционной системе Google Android:
Мы не лезем в поиск, но они решили заняться телефонами. Не надо заблуждаться, они хотят уничтожить iPhone. Мы им не позволим.
Стив Джобс о Mac OS X:
«Мы сделали значки на экране такими красивыми, что вам захочется их лизнуть».


Курсы валют

bank-ua.com bank-ua.com bank-ua.com

Стоит взглянуть