【好程序員特訓營】Java字符串截取分割

字符串分割是經常碰到的,下面羅列一下一些常用的方法,測試過的

使用substring:

substring(參數)是java中截取字符串的一個方法
有兩種傳參方式
一種是public String substring(int beginIndex)
返回一個新的字符串,它是此字符串的一個子字符串。該子字符串從指定索引處的字符開始,直到此字符串末尾。
另一種是public String substring(int beginIndex, int endIndex)
返回一個新字符串,它是此字符串的一個子字符串。該子字符串從指定的 beginIndex 處開始,直到索引 endIndex - 1 處的字符。因此,該子字符串的長度爲 endIndex-beginIndex。
下面需要將Ip地址:192.168.0.248分割出數字

public class subString {

	public static void main(String args[]){
		String str1="192.168.0.248";
		String [] str2=new String[4];
		int kk=str1.length();
		int count=0;
		int num=0;
		for(int i=count;i<kk;i++){
			if(str1.substring(i, i+1).equals(".")){
				str2[num]=str1.substring(count, i).trim();
				num++;
				count=i+1;
			}
			else{
				
			}
			str2[str2.length-1]=str1.substring(count, kk).trim();
			
		}
		for(int k=0;k<str2.length;k++){
		System.out.println(str2[k]);
		}
	}
}
<span style="font-size:18px;">輸出結果</span>:
<img src="https://img-blog.csdn.net/20141222225649740?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
第二種方法:

使用split方法,這個方法很直接

<pre name="code" class="java">public class subString {

	public static void main(String args[]){
		String str1="192.168.0.248";  
	        String a[] = str1.split(".");  
	        for(int k=0;k<a.length;k++){
	    		System.out.println(a[k]);
	    		}
	}
}

使用過split的同學可能直接就這麼用了,運行會發現,沒有輸出結果,爲什麼呢?我也很鬱悶,百度了一下找到了答案:

String ip = "192.168.0.248";

String[] ips = ip.split(".");// 我們經常用 分號,逗號,頓號以及其他一些符號 都很正常

剛開始以爲是split方法對此有特殊要求,小數點有特殊用途,不能作爲分隔符。最後查詢了下 jdk api才發現不是split方法的問題。是模式匹配的事。

    我們在調用split(".")方法時,程序都會以中間符號作爲模式匹配的字符。例如:ip.split(".")時,程序會用“.”在ip中進行匹配。但是在 Pattern 類中方法中,有些符號有特殊定義。例如:小數點“.”代表匹配的是任意字符,而不是小數點了。這些我們在正則表達式中經常遇到。如果想使用小數點 必須加上“\\

String[] ips = ip.split("\\."); 就能達到想要的效果了。以小數點作爲分隔符。

那麼正確的程序應該是:

<pre name="code" class="java">public class subString {

	public static void main(String args[]){
		String str1="192.168.0.248";  
	        String a[] = str1.split("\\.");  
	        for(int k=0;k<a.length;k++){
	    		System.out.println(a[k]);
	    		}
	}
}

不做一遍估計我也很難發現。

還有個比較特殊的: 如果用豎線“|”分隔的話,將出現不可得到的結果,必須改爲“\\|”  。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章