String aa = "今天"; String bb = "明天"; System.out.println(aa+bb);
먼저 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());
연결된 경우 문자열이 null 이면 concat은 NullPointerException을 발생시킵니다. 연결된 문자열이 빈 문자열("")인 경우 연결이 더 효율적입니다. 연결해야 할 문자열이 너무 많으면 생성된 문자열 개체가 많을수록 오버헤드가 커지므로 연결 효율성이 감소합니다.
String aa = "今天"; String bb = "明天"; String concat = aa.concat(bb); System.out.println(concat);
JDK1.8 아래의 Join() 메소드는 새로운 문자열 접합 자세를 제공합니다. String 클래스는 정적 메소드 조인을 추가하고 첫 번째 매개변수는 문자열 커넥터입니다
String aa = "今天"; String bb = "明天"; String join = String.join("-", aa, bb); System.out.println(join);
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()); } }
실제 프로젝트에서 문자열을 처리하려면 .org.apache.commons.lang3.StringUtils 패키지에서 이 클래스를 자주 사용합니다. 이 방법은 배열에서 문자열을 연결하는 데 더 적합하며 NullPointerException에 대해 걱정할 필요가 없습니다.
아아아아위 내용은 Java의 일반적인 문자열 접합 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!