Java中split的用法及一个金典入坑题目

split() 方法根据匹配给定的正则表达式来拆分字符串。

注意: . 、 $、 | 和 * 等转义字符,必须得加 \\。

注意:多个分隔符,可以用 | 作为连字符。

语法

public String[] split(String regex, int limit)

参数

  • regex -- 正则表达式分隔符。

  • limit -- 分割的份数。

返回值

字符串数组。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Test {
    public static void main(String args[]) {
        String str = new String("Welcome-to-Runoob");
  
        System.out.println("- 分隔符返回值 :" );
        for (String retval: str.split("-")){
            System.out.println(retval);
        }
  
        System.out.println("");
        System.out.println("- 分隔符设置分割份数返回值 :" );
        for (String retval: str.split("-", 2)){
            System.out.println(retval);
        }
  
        System.out.println("");
        String str2 = new String("www.runoob.com");
        System.out.println("转义字符返回值 :" );
        for (String retval: str2.split("\\.", 3)){
            System.out.println(retval);
        }
  
        System.out.println("");
        String str3 = new String("acount=? and uu =? or n=?");
        System.out.println("多个分隔符返回值 :" );
        for (String retval: str3.split("and|or")){
            System.out.println(retval);
        }
    }
}

输出结果:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 分隔符返回值 :
Welcome
to
Runoob
 
- 分隔符设置分割份数返回值 :
Welcome
to-Runoob
 
转义字符返回值 :
www
runoob
com
 
多个分隔符返回值 :
acount=?
 uu =?
 n=?

 

入坑例题

LeetCode  151. 翻转字符串里的单词 

给你一个字符串 s ,逐个翻转字符串中的所有 单词 。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。

说明:

输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
翻转后单词间应当仅用一个空格分隔。
翻转后的字符串中不应包含额外的空格。
 

示例 1:

输入:s = "the sky is blue"
输出:"blue is sky the"

入坑:部分成功代码

1
2
3
4
5
6
7
8
9
10
11
12
13
public String reverseWords(String s) {
    if (s.length() == 0) {
        return "";
    }
    String[] arr = s.split(" ");
    StringBuffer bf = new StringBuffer();
    for (int i = arr.length - 1; i >= 0; i--) {
        bf.append(arr[i]);
        bf.append(" ");
    }
    return bf.toString().trim();
 
}

分析:上述代码使用按空格分割将字符串s分成字符形数组arr,然后再倒序遍历arr,并将遍历的结果存在bf中,最后将bf转成字符串,然后去除头尾的空格,得到结果,但是,

当使用:String[] arr = s.split(" ");时,对于下面这种情形则会出问题:

1
s = " Bob      Loves              Alice "

根本原因就是当按照空格划分,出现几个连续的空格时,结果可能并不是我们想要的,看下面的代码或许你就明白了

1
2
3
4
5
6
7
public static void main(String[] args) {
        String s1="zhang san  li   si    wang";
        String[]a1=s1.split(" ");
        String[]a2=s1.split("\\s+");
        System.out.println(Arrays.toString(a1)+"   --- a1.len: "+a1.length);
        System.out.println(Arrays.toString(a2)+"   --- a2.len: "+a2.length);
    }  

思考一下,a1和a2这两个数组是一样长的吗?

看结果:

1
2
3
4
[zhang, san, , li, , , si, , , , wang]   --- a1.len: 11
[zhang, san, li, si, wang]   --- a2.len: 5
 
Process finished with exit code 0

其实我们希望a1的结果是a2那样,但是其实并不是,实际上a1的长度是11

因此对于按空格划分字符串时,使用“\\s+”或许效果更好(表示至少匹配1个或多个空格)

1
// 为什么是\\s,因为java中\表示是转义字符,例如想输出括号需要输出 \( 而不是( 因此java中用\\s

  

 

posted @   Justin_Hu  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示