1. 程式人生 > >JAVA——String.split函式用法總結

JAVA——String.split函式用法總結

今天碰到一道輸入格式題,大佬們都在用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




 

以後如果還有新的發現,會繼續更新,也希望有乾貨的大佬,可以多多分享指點,