首页 > 解决方案 > 我想从一行中提取字符串

问题描述

以下内容以文本文件的形式提供。我想提取数据(姓名、年龄、工作经验、职位)。我能怎么做?我尝试使用 java stringtokenizer 和 split 函数进行提取。但无法提取数据。

Name                                     Age                   Working Experience          Position                     
John                                     23                    10                          Team Leader                          
Christian Elverdam                       27                    7                           Director                    
Niels Bye Nielsen                        59                    16                          Composer
Rajkumar Hirani                          40                    23                          Director               
Vidhu Vinod Chopra                      58                    21                          Screenplay

预期输出:

John              |23|10|Team Leader|
Christian Elverdam|27|7 |Director   |
Niels Bye Nielsen |59|16|Composer   |
Rajkumar Hirani   |40|23|Director   |
Vidhu Vinod Chopra|58|21|Screenplay |

标签: javaarraysstring

解决方案


不要使用StringTokenizer

StringTokenizer是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人使用split方法Stringjava.util.regex包来代替。

split()如果您拆分 2 个或更多空格,则可以使用:split(" {2,}")

演示

String input = "Name                                     Age                   Working Experience          Position                     \n" +
               "John                                     23                    10                          Team Leader                          \n" +
               "Christian Elverdam                       27                    7                           Director                    \n" +
               "Niels Bye Nielsen                        59                    16                          Composer\n" +
               "Rajkumar Hirani                          40                    23                          Director               \n" +
               "Vidhu Vinod Chopra                      58                    21                          Screenplay\n";

List<String[]> rows = new ArrayList<>();
try (BufferedReader in = new BufferedReader(new StringReader(input))) {
    in.readLine(); // skip header line
    for (String line; (line = in.readLine()) != null; ) {
        rows.add(line.split(" {2,}"));
    }
}
for (String[] row : rows)
    System.out.println(Arrays.toString(row));

输出

[John, 23, 10, Team Leader]
[Christian Elverdam, 27, 7, Director]
[Niels Bye Nielsen, 59, 16, Composer]
[Rajkumar Hirani, 40, 23, Director]
[Vidhu Vinod Chopra, 58, 21, Screenplay]

推荐阅读