将字符串拆分为数组,格式如下

时间:2017-07-17 06:16:30

标签: java regex string split

以下是输入格式

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中实现这一点

4 个答案:

答案 0 :(得分: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);
}

希望这会对你有所帮助:)。

答案 1 :(得分:1)

如果我们假设您的代码符合此str =&#34; My Val 25 New 50 Old 25&#34 ;; 您的答案的解决方案如下

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]);
       }
}

答案 2 :(得分: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

答案 3 :(得分: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+ - 匹配任何换行符中的一个或多个
  • | - 或
  • \\h+(?=\\d{2}) - 匹配下一个位置有2个数字的任何水平空格中的一个或多个。

<强>输出:

New
25 
My Val
50 
Old
25