java - 我想从一行中提取字符串
问题描述
以下内容以文本文件的形式提供。我想提取数据(姓名、年龄、工作经验、职位)。我能怎么做?我尝试使用 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 |
解决方案
不要使用StringTokenizer
:
StringTokenizer
是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人使用split
方法String
或java.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]
推荐阅读
- flutter - 如何从 FutureBuilder 或异步代码构建 PreferredSizeWidget,而不是 Widget?
- c# - 一键部署设置需要安装 .NET Framework 4.7.2
- binary - 在c ++中左移一个数字的n个最低有效位的最快方法是什么
- serverless-framework - 有没有办法防止别名在部署时被重置?
- java - 使用 spring-boot 发送的 PDF 邮件附件为空
- javascript - 将 JSON 对象保存到 Node 中的文件中
- python - 如何在 crontab 中获取环境?
- docker - Rancher 2.3.1 创建注册表的菜单去哪了?
- excel - 转置一个 Excel 电子表格,其中包含日期和列的标题以及时间表的名称、时间进出
- python - 使用数组在 python 中处理大量数据时遇到性能问题