[자바, Java] StringUtils API (2)
StringUtils API
- 7. indexOfAny(final CharSequence cs, final char… searchChars)
- 8. lastIndexOfAny(final CharSequence str, final CharSequence… searchStrs)
- 9. indexOfAnyBut(final CharSequence seq, final CharSequence searchChars)
- 10. lastIndexOfAnyBut
- 11. containsOnly(final CharSequence cs, final String validChars)
- 12. containsNone(final CharSequence cs, final String invalidChars)
- 13. containsAny(final CharSequence cs, final CharSequence searchChars)
- 14. remove(final String str, final String remove)
- 15. delete
- 16. replace(final String text, final String searchString, final String replacement)
- 17. overlay(final String str, String overlay, int start, int end)
- 18. upperCase(final String str)
- 19. lowerCase(final String str)
- 20. swapCase(final String str)
- 21. capitalize(final String str)
- 22. uncapitalize(final String str)
- 23. reverse(final String str)
- 24. reverseDelimited(final String str, final char separatorChar)
7. indexOfAny(final CharSequence cs, final char… searchChars)
CharSequence 를 검색하여 주어진 문자 집합에서 문자의 첫 번째 인덱스를 찾는다.
메서드 실제 구현 모습은 복잡하기에 안적는게 좋겠다..
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.indexOfAny(null, 'a')); System.out.println(StringUtils.indexOfAny("", 'a')); // System.out.println(StringUtils.indexOfAny("abcd", null)); // 에러 System.out.println(StringUtils.indexOfAny("zzabyycdxx", 'z', 'a')); System.out.println(StringUtils.indexOfAny("zzabyycdxx", 'c', 'y')); System.out.println(StringUtils.indexOfAny("aba", 'z')); } } // 출력 결과 // -1 // -1 // 0 // 4 // -1
8. lastIndexOfAny(final CharSequence str, final CharSequence… searchStrs)
CharSequence 를 검색하여 주어진 문자 집합에서 문자의 마지막 인덱스를 찾는다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.lastIndexOfAny(null, "a")); System.out.println(StringUtils.lastIndexOfAny("a", null)); System.out.println(StringUtils.lastIndexOfAny("zzabyycdxx", "ab", "cd")); System.out.println(StringUtils.lastIndexOfAny("zzabyycdxx", "cd", "ab")); System.out.println(StringUtils.lastIndexOfAny("zzabyycdxx", "mn", "op")); System.out.println(StringUtils.lastIndexOfAny("zzabyycdxx", "mn", "op")); System.out.println(StringUtils.lastIndexOfAny("zzabyycdxx", "mn", "")); } } // 출력 결과 // -1 // -1 // 6 // 6 // -1 // -1 // 10
9. indexOfAnyBut(final CharSequence seq, final CharSequence searchChars)
CharSequence 를 검색하여 주어진 문자 집합에 없는 문자의 첫 번째 인덱스를 찾는다.
- null CharSequence는 -1 을 반환한다.
- null 또는 빈 검색 문자열은 -1 을 반환한다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.indexOfAnyBut(null, "a")); System.out.println(StringUtils.indexOfAnyBut("", "a")); // System.out.println(StringUtils.indexOfAnyBut("a", null)); // 에러 System.out.println(StringUtils.indexOfAnyBut("a", "")); System.out.println(StringUtils.indexOfAnyBut("zzabyycdxx", "za")); System.out.println(StringUtils.indexOfAnyBut("zzabyycdxx", "")); System.out.println(StringUtils.indexOfAnyBut("aba", "ab")); } } // 출력 결과 // -1 // -1 // -1 // 3 // -1 // -1
10. lastIndexOfAnyBut
주석 설명엔 있다고 써있지만, 실제로 클래스를 뒤져보면 존재하지 않는 메서드이다.
왜 그런지는 좀 더 찾아봐야 할 듯 싶다.
버전이 올라가면서 deprecated 된건가..?
11. containsOnly(final CharSequence cs, final String validChars)
CharSequence 에 특정 문자만 포함되어 있는지 확인한다.
- null CharSequence는 false 를 반환한다.
- 빈 문자열 (length()=0) 은 항상 true 를 반환한다.
메서드 실제 구현 모습
public static boolean containsOnly(final CharSequence cs, final char... valid) { if (valid == null || cs == null) { return false; } if (cs.length() == 0) { return true; } if (valid.length == 0) { return false; } return indexOfAnyBut(cs, valid) == INDEX_NOT_FOUND; } // 두번째 인자값이 다르지만, 어차피 String 을 인자값으로 쓰는 메서드도 이 메서드를 쓰기에 상관 없다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.containsOnly(null, "a")); // System.out.println(StringUtils.containsOnly("a", null)); // 에러 System.out.println(StringUtils.containsOnly("", "a")); System.out.println(StringUtils.containsOnly("ab", "")); System.out.println(StringUtils.containsOnly("abab", "abc")); System.out.println(StringUtils.containsOnly("ab1", "abc")); System.out.println(StringUtils.containsOnly("abz", "abc")); } } // 출력 결과 // false // true // false // true // false // false
12. containsNone(final CharSequence cs, final String invalidChars)
CharSequence에 특정 문자가 포함되어 있지 않은지 확인한다.
- null CharSequence 는 true 를 반환한다
- 빈 문자열(““)은 항상 true를 반환한다
이 메서드도 꽤 복잡하므로 실제 메서드는 생략…
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.containsNone(null, "a")); // System.out.println(StringUtils.containsNone("a", null)); // 에러 System.out.println(StringUtils.containsNone("", "a")); System.out.println(StringUtils.containsNone("ab", "")); System.out.println(StringUtils.containsNone("abab", "xyz")); System.out.println(StringUtils.containsNone("ab1", "xyz")); System.out.println(StringUtils.containsNone("abz", "xyz")); } } // 출력 결과 // true // true // true // true // true // false
13. containsAny(final CharSequence cs, final CharSequence searchChars)
CharSequence에 지정된 문자 집합에 한 문자라도 포함되어 있는지 확인한다.
- null CharSequence는 false 를 반환한다.
이 메서드도 꽤 복잡하므로 실제 메서드는 생략…
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.containsAny(null, "a")); System.out.println(StringUtils.containsAny("", "a")); // System.out.println(StringUtils.containsAny("a", null)); // 에러 System.out.println(StringUtils.containsAny("a", "")); System.out.println(StringUtils.containsAny("zzabyycdxx", "za")); System.out.println(StringUtils.containsAny("zzabyycdxx", "by")); System.out.println(StringUtils.containsAny("zzabyycdxx", "zy")); System.out.println(StringUtils.containsAny("zzabyycdxx", "\tx")); System.out.println(StringUtils.containsAny("zzabyycdxx", "$.#yF")); System.out.println(StringUtils.containsAny("aba", "z")); } } // 출력 결과 // false // false // false // true // true // true // true // true // false
14. remove(final String str, final String remove)
문자열에서 2번째 인자의 문자들은 전부 삭제한다.
- null 소스 문자열은 null 을 반환한다.
- 빈(“”) 소스 문자열은 빈 문자열을 반환한다.
- null 제거 문자열은 소스 문자열을 반환한다.
- 빈(“”) 제거 문자열은 소스 문자열을 반환한다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.remove(null, "a")); System.out.println(StringUtils.remove("", "a")); System.out.println(StringUtils.remove("a", null)); System.out.println(StringUtils.remove("a", "")); System.out.println(StringUtils.remove("queued", "ue")); System.out.println(StringUtils.remove("queued", "zz")); } } // 출력 결과 // null // // a // a // qd // queued
15. delete
- 이것도 lastIndexOfAnyBut 와 마찬가지로 존재하지 않는 메서드이다.
16. replace(final String text, final String searchString, final String replacement)
text 문자열에서 searchString 을 replacement 로 대체한다.
- 이 메서드에 전달된 null 참조는 작동하지 않는다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.replace(null, " ", "")); System.out.println(StringUtils.replace("", "", "a")); System.out.println(StringUtils.replace("any", null, "z")); System.out.println(StringUtils.replace("any", "a", null)); System.out.println(StringUtils.replace("any", "", "z")); System.out.println(StringUtils.replace("aba", "a", null)); System.out.println(StringUtils.replace("aba", "a", "")); System.out.println(StringUtils.replace("aba", "a", "z")); } } // 출력 결과 // null // // any // any // any // aba // b // zbz
17. overlay(final String str, String overlay, int start, int end)
str 문자열에서 start 부터 end 까지 overlay 로 변경한다.
- 문자열의 일부를 다른 문자열로 오버레이한다.
- null 문자열 입력은 null 을 반환한다.
- 음수 인덱스는 0으로 처리된다.
- 문자열 길이보다 큰 인덱스는 문자열 길이로 처리된다.
- 시작 인덱스는 항상 두 인덱스 중 작은 값이다.
- 문자열의 일부를 다른 문자열로 오버레이한다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.overlay(null, "a", 0, 0)); System.out.println(StringUtils.overlay("", "abc", 0, 0)); System.out.println(StringUtils.overlay("abcdef", null, 2, 4)); System.out.println(StringUtils.overlay("abcdef", "", 2, 4)); System.out.println(StringUtils.overlay("abcdef", "", 4, 2)); System.out.println(StringUtils.overlay("abcdef", "zzzz", 2, 4)); System.out.println(StringUtils.overlay("abcdef", "zzzz", 4, 2)); System.out.println(StringUtils.overlay("abcdef", "zzzz", -1, 4)); System.out.println(StringUtils.overlay("abcdef", "zzzz", 2, 8)); System.out.println(StringUtils.overlay("abcdef", "zzzz", -2, -3)); System.out.println(StringUtils.overlay("abcdef", "zzzz", 8, 10)); } } // 출력 결과 // null // abc // abef // abef // abef // abzzzzef // abzzzzef // zzzzef // abzzzz // zzzzabcdef // abcdefzzzz
18. upperCase(final String str)
문자열을 대문자로 변환한다.
- null 입력 문자열은 null 을 반환한다.
실제 메서드 구현 모습
public static String upperCase(final String str) { if (str == null) { return null; } return str.toUpperCase(); }
- null 에 대한 대처만 추가하고 String 의 toUpperCase 메서드를 쓰는 모습이다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.upperCase(null)); System.out.println(StringUtils.upperCase("")); System.out.println(StringUtils.upperCase("aBc")); } } // 출력 결과 // null // // ABC
19. lowerCase(final String str)
문자열을 소문자로 변환한다.
- null 입력 문자열은 null 을 반환한다.
실제 메서드 구현 모습
public static String lowerCase(final String str) { if (str == null) { return null; } return str.toLowerCase(); }
- 이것도 null 에 대한 대처만 추가하고 String 의 toLowerCase 메서드를 쓰는 모습이다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.lowerCase(null)); System.out.println(StringUtils.lowerCase("")); System.out.println(StringUtils.lowerCase("aBc")); } } // 출력 결과 // null // // abc
20. swapCase(final String str)
대문자와 제목을 소문자로, 소문자를 대문자로 바꾸는 문자열의 대소문자를 바꾼다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.swapCase(null)); System.out.println(StringUtils.swapCase("")); System.out.println(StringUtils.swapCase("The dog has a BONE")); } } // 출력 결과 // null // // tHE DOG HAS A bone
21. capitalize(final String str)
문자열의 가장 첫번째 문자를 대문자로 바꿔준다.
- null 입력 문자열은 null 을 반환한다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.capitalize(null)); System.out.println(StringUtils.capitalize("")); System.out.println(StringUtils.capitalize("cat")); System.out.println(StringUtils.capitalize("cAt")); System.out.println(StringUtils.capitalize("'cat'")); } } // 출력 결과 // null // // Cat // CAt // 'cat'
22. uncapitalize(final String str)
문자열의 가장 첫번째 문자를 소문자로 바꿔준다.
- null 입력 문자열은 null 을 반환한다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.uncapitalize(null)); System.out.println(StringUtils.uncapitalize("")); System.out.println(StringUtils.uncapitalize("cat")); System.out.println(StringUtils.uncapitalize("Cat")); System.out.println(StringUtils.uncapitalize("CAT")); } } // 출력 결과 // null // // cat // cat // cAT
23. reverse(final String str)
문자열을 뒤집는다.
- null 문자열은 null 을 반환한다.
실제 메서드 구현 모습
public static String reverse(final String str) { if (str == null) { return null; } return new StringBuilder(str).reverse().toString(); }
- null 만 대처한 뒤 StringBuilder 의 reverse() 메서드를 쓰는 모습이다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.reverse(null)); System.out.println(StringUtils.reverse("")); System.out.println(StringUtils.reverse("bat")); } } // 출력 결과 // null // // tab
24. reverseDelimited(final String str, final char separatorChar)
특정 문자로 구분된 문자열을 뒤집는다.
- 구분 기호 사이의 문자열은 반전되지 않는다.
실제 메서드 구현 모습
public static String reverseDelimited(final String str, final char separatorChar) { if (str == null) { return null; } // could implement manually, but simple way is to reuse other, // probably slower, methods. final String[] strs = split(str, separatorChar); ArrayUtils.reverse(strs); return join(strs, separatorChar); }
- null 에 대한 대처를 한 후, split 으로 나눠서 배열 순서를 뒤집는 모습이 보인다.
예제
class Scratch { public static void main(String[] args) { System.out.println(StringUtils.reverseDelimited(null, 'x')); System.out.println(StringUtils.reverseDelimited("", '.')); System.out.println(StringUtils.reverseDelimited("a.b.c", 'b')); System.out.println(StringUtils.reverseDelimited("a.b.c", 'x')); System.out.println(StringUtils.reverseDelimited("a.b.c", '.')); } } // 출력 결과 // null // // .cba. // a.b.c // c.b.a
사실 이 외에도 더 많은 String 클래스와 같은 메서드들이 존재하지만 이 정도만 해도 굉장히 유용하다 생각한다.
- null 에 대한 안정성이 생기는 것이니 앞으로 String 메서드보다 StringUtils 메서드를 더 활용해보는 것이 좋겠다.