2017-07-17 35 views
-5

以下是輸入格式字符串分割到數組中的格式如下

str = "New 25 \nMy Val 50 \nOld 25 "; 
String[] words = str.trim().split("\\s+"); 
for(int i = 0; i <words.length; i++) { 
    System.out.println(words[i]); 
} 

輸出:

New 
25 
My 
Val 
50 
Old 
25 

但我的期望是:

New 
25 
My Val 
50 
Old 
25 

我如何能實現這在java中使用正則表達式

+6

你的輸出/所需的輸出不匹配您提供的輸入。 –

+0

抱歉給您帶來不便。輸入是「我的Val 25 \ nNew 50 \ nOld 25」 –

+0

@KarthikSankar用適當的輸入編輯你的問題。 – Antoniossss

回答

2

嘗試這個 -

String str = "My phone 25\nValet 50\niPod 25"; 

String lines[] = str.split("\\r?\\n"); 

for(String line : lines){ 
    int index=line.trim().lastIndexOf(" "); 
    String str1 = line.substring(0,index); 
    System.out.println(str1); 
    String str2 = line.substring(index+1); 
    System.out.println(str2); 
} 

希望這將幫助你:)

+0

你可以只解釋「\\ r?\\ n」 –

+0

@KarthikSankar這是UNIX和Windows的_newline_字符。 –

1

如果我們假設你的代碼str像這樣str =「My Val 25 New 50 Old 25」; 你的答案的溶液,作爲跟隨

str = "My Val 25 New 50 Old 25"; 
String[] words = str.trim().split("\\s+"); 
for(int i = 0; i <words.length; i++) { 
     if(i == 0){ 
     System.out.print(words[i]+" "); 
     } 
     else{ 
       System.out.println(words[i]); 
     } 
} 
+0

如果我有這樣的「新25 \ n我Val 50 \ nOld 25」您的代碼將不起作用 –

1

雖然問題是,這麼多曖昧,但還是想知道,你的問題和回答。希望它會幫助你!

我覺得你的字符串是由一些key和數字value對應的。

如果是這樣,那麼您可以通過在數字前面的所有空格處拆分字符串來獲得所需的輸出。

[ ](?=\d)將捕獲任何數字前的空格。

str = "My phone 25\nValet 50\niPod 25"; 
String[] words = str.trim().split("[ ](?=\\d)"); // you need to escape '\' using extra '\' 
for(int i = 0; i <words.length; i++) { 
    System.out.println(words[i]); 
} 

輸出將是:

My phone 
25 
Valet 
50 
iPod 
25 
+0

你可以簡單地解釋一下「[](?= \ d)」 –

+0

'[]'是用於匹配一個空格,而'(?= \ d)'是檢查數字的正向預測。總的來說,它將檢查任何數字之前的空格。 –

+0

如果我必須在兩位數字之前檢查空格。那麼我如何檢查 –

0

這是基於split一個純粹的正則表達式,不需要任何代碼級後處理:對

String str = "New 25 \nMy Val 50 \nOld 25"; 
String[] words = str.trim().split("\\R+|\\h+(?=\\d{2})"); 
for(int i = 0; i <words.length; i++) { 
    System.out.println(words[i]); 
} 

此正則表達式分裂:

  • \\R+ - 匹配的一個或多個任何換行符
  • |的 - OR
  • \\h+(?=\\d{2}) - 匹配的一個或多個具有上下一位置2位任何水平空白的。

輸出:

New 
25 
My Val 
50 
Old 
25 
+0

我想檢查任何有兩位數的水平空白。是否有可能 –

+0

是的,你可以使用'\\ h +(?= \\ d {2})'或查看更新後的答案。 – anubhava

+0

這工作正常嗎? – anubhava