JAVA——String.split函数用法总结

版权声明:转载请注明 https://blog.csdn.net/NCC__dapeng/article/details/83895102

今天碰到一道输入格式题,大佬们都在用split,只有我在一点点模拟,羞愧羞愧,在这里把split函数边学习边整理一下,ORZ。

首先,split函数分为两种:

一是:split(regex),参数为要分隔的字符串或者正则表达式。

二是:ss.split(regex, limit)。此方法可以的第二个参数一般不太常用,但是这里依旧给出第二个参数代表的具体含义:  limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

以上两个函数的返回值均为String[].

(注意:一下所有代码,均是使用第一种方法)

总结split的四种常用的使用方法:

一、普遍方法;

给出样例代码:

package a;


public class a {

	public static void main(String[] args) {
		
		String s="我,是,一,个,教,师";
		String[] t=s.split(",");
		
		for(int i=0;i<t.length;i++)
		{
			System.out.print(t[i]);
		}

	}

}

//样例输出:我是一个教师

在这里可以看出split函数的基本用法,就是以括号里的特定表达式进行对字符串的分割,并将分割的每一个子串储存在String[]数组中。

二、转义字符的分割;

有一类特定的字符,在进行split的分割中需要在字符之间加"\\"或者是"[]",来对其进行转义。

这些字符有 | , + , * , ^ , $ , / , | , [ , ] , ( , ) , - , . , \(咳咳,里面的逗号不是哈)等, 因它们是正则表达式中的一部分, 所以如果想用该字符本身, 这些字符需要进行转义才能表示它本身;

下面给出样例代码:

package a;


public class a {

	public static void main(String[] args) {
		
		String s="我*是*一*个*教*师";
//		String[] t=s.split("*");
//		
//		for(int i=0;i<t.length;i++)
//		{
//			System.out.println(t[i]);
//		}
		//方法出错,无法得到想要的结果,并且编译报错
		
		
		String[] t=s.split("\\*");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}//正确方法

        String[] t=s.split("[*]");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}//正确方法
		

	}

}

 转义字符必须经过转义之后才能进行分割!!!

三、同种多个分割符的分割

为了方便理解这里先给出一些样例,方便理解

package a;


public class a {

	public static void main(String[] args) {
		
		String s="***我*****是****一****个*****教******师******";

		
		
		String[] t=s.split("[*]");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
		

	}

}


//样例输出

//我
//
//
//
//
//是
//
//
//
//一
//
//
//
//个
//
//
//
//
//教
//
//
//
//
//
//师

从样例可以看出,当有多个分隔符连接在一起时,split函数只会忽略掉第一个分隔符(开头一个也不忽略,直接全部变为null存在字符串数组t中),而其他的全部当做空字符串处理,对应输出中的空行。

下面给出解决方法;

package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="******我******是*****个****教****师";
		String[]  t=s.split("\\*+");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}


//样例输出

//输出测案例 --------
//
//我
//是
//个
//教
//师

其中的‘+’表示多次匹配的意思,所以就可以消除中间许多匹配符号的问题,但是注意开头的空行,这个是无法避免,但具体我也不是很清楚,希望懂得可以指点一下。下面再给出一个案例加深理解。

package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="a     b                 c             d";
		String[]  t=s.split("\\s+");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}


//输出测案例 --------
//a
//b
//c
//d

其中\s代表的是空格符,这个代码可用于筛选其中字符串的空格个(再次注意,如果开头有分隔符,第一行输出的是空行也就相当于null)。

四、多种分割符的分割

在很多种情况下,一种分割符是无法满足我们的要求的,这就要求我们一次根据多种分隔符进行分割。

下面给出样例代码:

package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="1+2-2*2%4+6/5=3";
		String[]  t=s.split("[+,0,*,%,/,=,-]");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}


//输出测案例 --------
//1
//2
//2
//2
//4
//6
//5
//3

在进行多种符号分割时需要用到[]符号或者 | 分隔“|”分隔实例,这篇博客详细介绍了‘|’在这里不多提。【】本身相当于转义,所以当【】中含有转义字符时不需要再加 \ 进行转义,这也是他的方便之处。

如果需要进行多次匹配的话在【】外加‘+‘即可。下面同样给出例子。

package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="1+++++2-2*2%4+6/5=3";
		String[]  t=s.split("[+,0,*,%,/,=,-]+");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}


//输出测案例 --------
//1
//2
//2
//2
//4
//6
//5
//3


package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="abccccccdr    fdacccccsfdgsa";
		String[]  t=s.split("[\\s,c]+");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}

//输出测案例 --------
//ab
//dr
//fda
//sfdgsa



五、特殊情况

本来写到这里想结束这篇博客的,但是突然在网上看到一种很有意思的情况,在这里给大家分享一下,注意以上四种中也不是非常全面,更多的需要自己大胆去写去揣摩。

下面给出样例代码以及其注释:

package ceshi;

public class Main {
	public static void main(String[]  args)
	{
		String s="abccccccdd\\gsa";
		String[]  t=s.split("\\\\");
		
		System.out.println("输出测案例 --------");
		for(int i=0;i<t.length;i++)
		{
			System.out.println(t[i]);
		}
	}

}

//输出测案例 --------
//abccccccdd
//gsa




以后如果还有新的发现,会继续更新,也希望有干货的大佬,可以多多分享指点,

猜你喜欢

转载自blog.csdn.net/NCC__dapeng/article/details/83895102