2017-07-17 33 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