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
以後如果還有新的發現,會繼續更新,也希望有乾貨的大佬,可以多多分享指點,