2012-09-27 136 views
5

用'。'分割Java字符串

1. This is a test message 

我想打印

This is a test message 

我想

String delimiter="."; 
String[] parts = line.split(delimiter); 
int gg=parts.length; 

比要打印陣列

for (int k ;k <gg;K++) 
    parts[k]; 

但我的GG始終爲0 。 我錯過了什麼。 我只需要刪除數字和。和空格

的數量可以是1(或)5位數字

+3

斯普利特需要一個正則表達式和'.'有一個特殊的含義。 – assylias

+0

對於聲明看起來很奇怪。你的意思是:for(int k = 0; k Javier

回答

11

您使用"."作爲分隔符,你應該打破.字符的特殊含義。

.在正則表達式中的char是「任何字符」,所以你的分裂只是根據「任何字符」分裂,這顯然不是你所追求的。

使用"\\."作爲分隔符

欲瞭解更多信息,你可以have a look at the tutorial預先定義的字符類。
有關在一般的正則表達式的更多信息(包括上面的),你可以嘗試this tutorial


編輯
附:使用String.replaceAll()方法,您可以使用單行程來實現您的工作(刪除號碼)。

System.out.println(line.replaceAll("[0-9]+\\.\\s+", "")); 

將提供輸出

This is a test message 

您的輸入例子。

這個想法是:[0-9]是任何數字。 - +表示可以有任何數量的數字,它們大於0. \\.是一個點(具有如上所述的突破)並且\\s+至少有一個空格。
它全部替換爲空字符串。

但是,請注意,對於如下字符串:"1. this is a 2. test" - 它將提供「這是一個測試」,並刪除「2.」,所以請仔細想一想,如果這確實是你以後的事情。

4

使用下面的代碼..

String delimtor="\\."; // use this because . required to be skipped 
String[] parts = line.split(delimtor); 

爲了您的for循環。

for (int k=0 ;k <gg.length;K++) 
    parts[k]; 
+0

不會編譯..(編輯版本將會) – amit

+0

我在線程「main」java.lang.ArrayIndexOutOfBoundsException中得到這個異常......我應該考慮任何事情嗎? –

+0

我做了looplik ethat –

2

試試這個

String delimtor = "\\."; 

「」對於正則表達式有特殊意義。

1

如果你只是想刪除前綴數字,那麼你可以在一行中做到這一點。不知道你是否真的想分割多個點。如果它只是前綴,那麼你可以在一行中做到這一點

String s = "1. with single digit"; 
String s2 = "999. with multiple digits"; 
String s3 = "999. with multiple digits . and . dots"; 

assertEquals("with single digit", (s.substring(s.indexOf(".") + 1).trim())); 
assertEquals("with multiple digits", (s2.substring(s2.indexOf(".") + 1).trim())); 
assertEquals("with multiple digits . and . dots", (s3.substring(s3.indexOf(".") + 1).trim()));