>  기사  >  Java  >  Java의 일반적인 문자열 접합 방법은 무엇입니까?

Java의 일반적인 문자열 접합 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-01 12:34:142107검색

방법 1: + 가장 일반적인 방법

        String aa = "今天";
        String bb = "明天";
        System.out.println(aa+bb);

방법 2: StringBuilder.append() 및 StringBuffer.append()

먼저 StringBuffer가 있고 다음에는 StringBuilder가 있습니다. 둘은 쌍둥이와 같습니다. 그러나 형인 StringBuffer의 메서드는 대부분 동기화되어 있으므로 StringBuffer는 스레드로부터 안전하지만 효율성이 StringBuilder

        String aa = "今天";
        String bb = "明天";
        StringBuilder sber = new StringBuilder();
        StringBuffer sbf = new StringBuffer();
        sber.append(aa).append(bb);
        System.out.println(sber.toString());
        sbf.append(aa).append(bb);
        System.out.println(sbf.toString());

보다 낮습니다. 방법 3: String 클래스 아래의 cocat() 메서드

연결된 경우 ​​문자열이 null 이면 concat은 NullPointerException을 발생시킵니다. 연결된 문자열이 빈 문자열("")인 경우 연결이 더 효율적입니다. 연결해야 할 문자열이 너무 많으면 생성된 문자열 개체가 많을수록 오버헤드가 커지므로 연결 효율성이 감소합니다.

        String aa = "今天";
        String bb = "明天";
        String concat = aa.concat(bb);
        System.out.println(concat);

메서드 4: String 클래스

JDK1.8 아래의 Join() 메소드는 새로운 문자열 접합 자세를 제공합니다. String 클래스는 정적 메소드 조인을 추가하고 첫 번째 매개변수는 문자열 커넥터입니다

		String aa = "今天";
        String bb = "明天";
        String join = String.join("-", aa, bb);
        System.out.println(join);

메소드 5: StringJoiner

StringJoiner는 JDK1.8, java.util 패키지의 클래스로, 구분 기호로 다시 연결된 문자 시퀀스를 구성하는 데 사용됩니다.

		String aa = "今天";
        String bb = "明天";
        StringJoiner sj = new StringJoiner(":", "[", "]");
        sj.add(aa).add(bb);
        System.out.println(sj.toString());

StringJoiner 소스 코드

package java.util;

public final class StringJoiner {
    private final String prefix;//前缀
    private final String delimiter;//间隔符
    private final String suffix;//后缀
    private StringBuilder value;//值

    private String emptyValue;//空值

    public StringJoiner(CharSequence delimiter) {
        this(delimiter, "", "");//默认前缀和后缀为"",重载调用
    }

    public StringJoiner(CharSequence delimiter,
                        CharSequence prefix,
                        CharSequence suffix) {
        //间隔符,前缀和后缀判断是否为null,null将抛出异常
        Objects.requireNonNull(prefix, "The prefix must not be null");
        Objects.requireNonNull(delimiter, "The delimiter must not be null");
        Objects.requireNonNull(suffix, "The suffix must not be null"); 
        // 成员变量赋值
        this.prefix = prefix.toString();
        this.delimiter = delimiter.toString();
        this.suffix = suffix.toString();
        this.emptyValue = this.prefix + this.suffix;//空值被设置为只有前后缀
    }
	//设置空值,检查是否为null
    public StringJoiner setEmptyValue(CharSequence emptyValue) {
        this.emptyValue = Objects.requireNonNull(emptyValue,
            "The empty value must not be null").toString();
        return this;
    }

    @Override
    public String toString() {
        if (value == null) {
            return emptyValue;//没有值将返回空值或者后续设置的空值
        } else {
            if (suffix.equals("")) {
                return value.toString();//后缀为""直接返回字符串,不用添加
            } else {
	            //后缀不为"",添加后缀,然后直接返回字符串,修改长度
                int initialLength = value.length();
                String result = value.append(suffix).toString();
                // reset value to pre-append initialLength
                value.setLength(initialLength);
                return result;
            }
        }
    }
    初始化,先添加前缀,有了之后每次先添加间隔符,StringBuilder后续append字符串
    public StringJoiner add(CharSequence newElement) {
        prepareBuilder().append(newElement);
        return this;
    }
	//合并StringJoiner,注意后面StringJoiner 的前缀就不要了,后面的appen进来
    public StringJoiner merge(StringJoiner other) {
        Objects.requireNonNull(other);
        if (other.value != null) {
            final int length = other.value.length();
            // lock the length so that we can seize the data to be appended
            // before initiate copying to avoid interference, especially when
            // merge 'this'
            StringBuilder builder = prepareBuilder();
            builder.append(other.value, other.prefix.length(), length);
        }
        return this;
    }
	//初始化,先添加前缀,有了之后每次先添加间隔符
    private StringBuilder prepareBuilder() {
        if (value != null) {
            value.append(delimiter);
        } else {
            value = new StringBuilder().append(prefix);
        }
        return value;
    }

    public int length() {
        // Remember that we never actually append the suffix unless we return
        // the full (present) value or some sub-string or length of it, so that
        // we can add on more if we need to.
        //不忘添加后缀的长度
        return (value != null ? value.length() + suffix.length() :
                emptyValue.length());
    }
}

방법 6: StringUtils.join()

실제 프로젝트에서 문자열을 처리하려면 .org.apache.commons.lang3.StringUtils 패키지에서 이 클래스를 자주 사용합니다. 이 방법은 배열에서 문자열을 연결하는 데 더 적합하며 NullPointerException에 대해 걱정할 필요가 없습니다.

아아아아

위 내용은 Java의 일반적인 문자열 접합 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제