字符串常用方法

split

#1 含义:将字符串根据 指定分隔符分割成多个字串,并返回子串数组
   有两个重载方法:
   # String[] list = s.split(int separator)
     根据给定分割符 seprator,将字符串s分割成多个子串
   # String[] list = s.split(int separator, int limit)
     根据给定分割符 separator,将字符串s分割成多个子串
     1 若limit >0,则 separator最多运用limit-1次,即最多将字符串分割成limit个;
       特殊:limit=1,则相当于没有分割;
            limit < 分隔符出现的次数,则最后一个子串包含字符串剩下的字符串;
            limit > 分隔符出现的次数,相当于limit <0,尽可能运用separator
     2 若limit =0,则尽可能多的运用separator,并且结尾如果是空字符串,则丢弃
       s.split(int separator)方法,limit参数默认 =03 若limit <0,则可能多的运用separator(结尾是空字符串也会保留存入到数组中)
     
#2 使用:
String s = "ab,cd,ef";
String[] strList = s.split(",");
----> strList = [ab, cd, ef]

(1)示例

[1]示例:

String s = "adgd,13,,54,";
//没有limit参数,则limit默认为0
//limit==0,则如果结尾是空字符串,不会将空字符串放入数组中;但是处于中间的空字符串会放入数组中
String[] list = s.split(",");
System.out.println("子串数组长度:" + list.length);
for (String s1 : list) {
    System.out.println(s1);
}

结果:

子串数组长度:3
adgd
13

54

[2]示例:有limit参数

String s = "adgd,13,54,,";
//设置了limit的值,如果limit值比字符串中分隔符出现的次数还大,则相当于全部分割开来,此时相当于limit <0
//如果limit < 分隔符出现的次数,则最后一个子串包含字符串剩下的字符串
String[] list = s.split(",",10);
System.out.println("子串数组长度:" + list.length);
for (String s1 : list) {
    System.out.println(s1);
}

结果:

子串数组长度:5
adgd
13
54


join

#1 合并:将数组中的元素合并成一个字符串
   有两个重载方法:
   # String str = StringUtils.join(T... element);
     合并多个元素,元素T可以是Object类型的
     只有一个element时,element如果是List、Set集合,则 str = [num1,num2...]
     只有一个element时,element如果是数组Object[],则 str = num1num2
   # String str = StringUtils.join(List<String> list, String seperator);
     将list中的元素通过分隔符seperator合并在一起,list必须是集合或是数组
     seperator是分隔符,如果为"", 则没有分隔符,数组元素直接连接;
     注意:seperator为""和 seperator为null,输出的结果是不一样的;seperator为null就是第一种重载方法

#2 注意:
1 第一种重载方法可以有多个对象,join方法会将多个对象合并在一起
2 如果seperator为null,则表示没有分隔符,使用第一种重载方法;
  如果seperatorwei"",则表示有分隔符,但分隔符为空字符串,list
3 StringUtils.join(list);
  和 StringUtils.join(list,"");的区别
  # 无分隔符时,join(list)方法将list对象封装在一个 Object[]数组中
    此时,遍历一次,将list这个对象的数据都放进数组了;
    因此,得到 [ab, cd] 这样的结果
  # 有分隔符时,join(list, "")方法将list对象作为一个 Object[]数组
    此时,遍历一次,将list中某个位置的元素输出;
    因此,得到 abcd 这样的结果

#3 使用:
List<String> list = new ArrayList<>();
Collections.addAll(list, "ab", "cd", "ef");
String str = StringUtils.join(list, "_");
----> str = "ab_cd_ef"

(1)示例:

Set<String> set = new HashSet<>();
set.add("dg");
set.add("eg");


System.out.println(StringUtils.join(set));
System.out.println(StringUtils.join(set, ""));

结果:

[eg, dg]
egdg

🔴String、List、String[]互转

# String -> String[]:使用String的split方法
  String[] strs = str.split(",");
# String -> List<String>:先获得String[],再根据List的特性获取List
  List<String> list = ArrayList.asList(str.split(","));

# String[] -> String:使用String或StringUtils的join方法
  String str = String.join("", strs);
  或 String str = StringUtils.join(strs, "");
# List<String> -> String:跟String[]一样
  String str = String.join("", list);
  或 String str = StringUtils.join(list, "");

# String[] -> List<String>:使用List的特性-> asList
  List<String> list = Arrays.asList(strs);
# List<String> -> String[]:使用List的特性-> toArray
  String[] strs = list.toArray(new String[list.size()]);

判断字符串的前缀

#1 startsWith(prefix)
判断字符串是否以字符串s为前缀
是,则返回true;否,则返回false;

#2 方法的重载
1 startsWith(String prefix)
  判断字符串是否以s为前缀
2 startsWith(String prefix, int offset)
  判断字符串从s[offset]开始,是否以字符串prefix为前缀
  
#3 方法的变异:endsWith(suffix)
判断字符串是否以字符串suffix为后缀
1 endsWith实现的代码也是以startsWith代码为准的
  只是offset是value.length - suffix.length, 这样直接跳到了倒数suffix长度的位置开始逐位比较字符
  
#4 使用:
String str = "abcdef";
boolean status = str.startsWith("ab");

源代码:

public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    //让value 从toffset开始比较是否以什么为前缀
    int to = toffset;
    char pa[] = prefix.value;
    int po = 0;
    int pc = prefix.value.length;
    if ((toffset < 0) || (toffset > value.length - pc)) {
        return false;
    }
    //开始逐位比较
    while (--pc >= 0) {
        if (ta[to++] != pa[po++]) {
            return false;
        }
    }
    return true;
}

示例:

//实现让字符串以 \ 
char suffix = '\';
String s = "abcdef";
if (!s.endsWith(String.valueOf(suffix))){
    s += "" + suffix;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值