String and StringBuffer

String, StringBuffer 또는 StringBuilder 인스턴스의 조작으로 발생할 수 있는 다양한 문제를 다룹니다.

1. StringInstantiation

String 객체를 생성할 경우 new String을 이용한 인스턴스화는 불필요합니다.

1 .우선순위: Medium High

2 .심각도: 에러

3 .예시

                private String bar = new String("bar"); // String bar = "bar"; 여야 합니다.

2. StringToString

이미 문자열 인스턴스로 알려진 객체에서 toString()을 호출하지 마세요. 이것은 불필요 합니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                private String baz() {
                    String bar = "howdy";
                    return bar.toString();
                }

3. UnnecessaryCaseChange

equalslgnoreCase() 사용하는 것이 toUpperCase/toLowerCase().equals() 사용하는 것보다 빠릅니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                boolean answer1 = buz.toUpperCase().equals("baz");          // buz.equalsIgnoreCase("baz")이 되어야 합니다.

                boolean answer2 = ;  // 또 하나의 불필요한 toUpperCase()

4. UseStringBufferLength

문자열의 길이를 확인하기 위해서 StringBuffer.toString().equals("")로 빈 문자열을 확인 하는 작업이나, StringBuffer.toString().length() == 로 길이를 확인할 필요 없이, StringBuffer.length()로 대신하시기 바랍니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                StringBuffer sb = new StringBuffer();

                if (sb.toString().equals("")) {}        // 비효율

                if (sb.length() == 0) {}                // 권장

5. UseIndexOfChar

단일 문자의 색인을 검사할 때 String.indexOf(char) 를 사용하시기 바랍니다. 더 빠릅니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                String s = "hello world";
                  // 비권장
                if (s.indexOf("d") {}
                  // 권장
                if (s.indexOf('d') {}

6. InefficientEmptyStringCheck

String.trim().length()는 문자열이 공백 문자열인지 확인하는데 매우 비효율적입니다.
이 방식은 new String 객체를 단지 문자열의 길이를 확인하기 위해서만 생성합니다.
static 메소드와 반복문을 이용해서 문자열 전체를 character 단위로 Caracter.isWhitespace()를 확인하고 공백 문자가 아닌 문자가 있다면 false를 반환합니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                public void bar(String string) {
                    if (string != null && string.trim().size() > 0) {
                        doSomething();
                    }
                }

7. UselessStringValueOf

문자열에 다른 자료형의 변수를 결합하기위해서 String.valueOf를 사용할 필요 없이 + 연산자로 바로 연결하는 것이 좋습니다.

1 .우선순위: Medium

2 .심각도: 경고

3 .예시

                public String convert(int i) {
                    String s;
                    s = "a" + String.valueOf(i);    // 불필요
                    s = "a" + i;                    // 권장
                    return s;
                }

8. StringBufferInstantiationWithChar

StringBuffer sb = new StringBuffer('c'); 이와 같은 생성자에 char를 넣어서 초기화는 방법은 피합니다.
이와 같은 경우, 개발자의 의도와는 다르게, char는 자동을 int로 형변환되어 StringBuffer의 size를 결정하는 용도로 사용됩니다.
'c’를 초기 값으로 사용하고 싶을 경우 "c"와 같이 String형으로 전달해야합니다.

new StringBuffer() // 16
new StringBuffer(6) // 6
new StringBuffer("hello world") // 11 + 16 = 27
new StringBuffer('A') // chr(A) = 65
new StringBuffer("A") // 1 + 16 = 17
new StringBuilder() // 16
new StringBuilder(6) // 6
new StringBuilder("hello world") // 11 + 16 = 27
new StringBuilder('C') // chr(C) = 67
new StringBuilder("A") // 1 + 16 = 17

1 .우선순위: Medium Low

2 .심각도: 경고

3 .예시

                // 오해의 소지가 있는 인스턴스화, 이 버퍼는 실제로 99자 길이로 크기가 지정됩니다.
                StringBuffer  sb1 = new StringBuffer('c');
                StringBuilder sb2 = new StringBuilder('c');

                // 이러한 형태에서는 단일 문자만 할당됩니다.
                StringBuffer  sb3 = new StringBuffer("c");
                StringBuilder sb4 = new StringBuilder("c");

Copyright© Bankwareglobal All Rights Reserved.