【问题标题】:Split string into array as in the following format将字符串拆分为数组,格式如下
【发布时间】:2017-12-21 13:43:37
【问题描述】:

以下是输入格式

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

【问题讨论】:

  • 您的输出/所需输出与您提供的输入不匹配。
  • 很抱歉给您带来不便。输入是“我的 Val 25 \nNew 50 \nOld 25”
  • @KarthikSankar 使用正确的输入编辑您的问题。

标签: java regex string split


【解决方案1】:

这是一个基于纯正则表达式的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

【讨论】:

  • 我想检查下一个有两位数的水平空白。有没有可能
  • 是的,您可以使用\\h+(?=\\d{2}) 或查看更新的答案。
【解决方案2】:

虽然这个问题非常模棱两可,但仍然试图理解你的问题并回答。希望对你有帮助!!

我认为你的字符串是由一些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

【讨论】:

  • 你能简单解释一下“[ ](?=\d)”
  • [ ] 用于匹配一个空格,而(?=\d) 是用于检查数字的正向前瞻。总的来说,它会检查任何数字之前的空格。
  • 如果我必须在两位数之前检查空格。那我该如何检查
  • [ ](?=\d{2}\b) 这将帮助您在 2 位数之前获得空间。
【解决方案3】:

试试这个-

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

希望对你有帮助:)

【讨论】:

  • 你能解释一下“\\r?\\n”
  • @KarthikSankar 这是 UNIX 和 Windows 的 换行符 字符。
【解决方案4】:

如果我们假设您的代码 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]);
       }
}

【讨论】:

  • 如果我有这样的 str "New 25 \nMy Val 50 \nOld 25" 你的代码将无法工作
猜你喜欢
  • 1970-01-01
  • 2016-04-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多