浅谈Java字符串

  从概念上而言,Java字符串就是Unicode字符序列。由于Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String,每个用双引号的括起来的字符串都是String类的一个实例:

String t = ""; // 空字符串
String t = "Hello"; //字符串t的内容为Hello

 

  很自然地,我们会考虑对字符串进行操作,比如取字符串中的子串进行操作,这里我们就要用到substring方法:

String t = "Welcome to Java world!";
String s = t. substring(0,4); //substring第一个参数表示从什么位置取字符常量,第二个参数表示取多少个字符常量

 

  Java语言支持"+"拼接两个字符串,如果要把多个字符串拼接放在一起,用一个定界符分割,可以使用静态join方法:

String all = String.join("/","j","a","v","a");
System.out.println(all); // 输出j/a/v/a
//在String.join()方法中,第1个参数是分隔符,第2个参数是需要进行拼接的元素,可以是多个字符串,可以是字符串数组,可以是字符串队列。

 

  要想更清楚了解String.join()方法,我们来看看源码:

//String.join()
//delimiter 分隔符
//elements 需要连接的元素
public static String join(CharSequence delimiter, CharSequence... elements) {
    //判断是否为null,如果为null,抛出NullPointerException
    Objects.requireNonNull(delimiter);
    Objects.requireNonNull(elements);
    //构造一个分隔符为delimiter的实例
    StringJoiner joiner = new StringJoiner(delimiter);
    //循环拼接
    for (CharSequence cs: elements) {
        joiner.add(cs);
    }
    return joiner.toString();
}

//StringJoiner构造器源码
//1个参数构造器
public StringJoiner(CharSequence delimiter) {
    //调用3个参数构造器
    this(delimiter, "", "");
}
 
//3个参数构造器
//delimiter 分隔符
//prefix 前缀
//suffix 后缀
public StringJoiner(CharSequence delimiter,
                    CharSequence prefix,
                    CharSequence suffix) {
    //判断是否为null,如果为null,抛出NullPointerException
    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;
}


public StringJoiner add(CharSequence newElement) {
    //prepareBuilder()返回参数,调用append()方法
    prepareBuilder().append(newElement);
    return this;
}

private StringBuilder prepareBuilder() {
    if (value != null) {
        value.append(delimiter);
    } else {
        value = new StringBuilder().append(prefix);
    }
    return value;
}

   Java的String类对象为不可变字符串,类似于final类。它有个优点就是:编译器可以共享字符串变量。看起来就像是将各种字符串放在公共的储存池里,字符串变量指向储存池中相应的位置。

另外java String 类比较字符串相等时时不能用“ == ”,只能用  "equals" 。

 

参考:

1.https://blog.csdn.net/qq_24404723/article/details/86064533

2.Java核心技术

转载于:https://www.cnblogs.com/ouhonglei/p/10891199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值