如何将字符串拆分为 java 中的列

How to split string into columns in java

我正在使用 Talend 解析具有以下行类型的文件,我已尝试使用 tFileInputDelimted 组件来解析它,但文本封闭符“'”不起作用。

1, 0, 1, 73, 0, 'root.1', 'Root Asset', '{"site":{"6":1,"2":1},"core":{"6":1}}'

我需要以下格式的输出。

1
0
1
73
0
root.1
Root Asset
{"site":{"6":1,"2":1},"core":{"6":1}}

已编辑:示例行

`90, 'Loader Menu', '', '<div class="arrowlistmenu">\r\n<h3 class="menuheader"><a href="index.php/component/ordersoncalendar">View Orders</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/reportmaster/?task=report_details">Time Sheets</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/availabilitycalendar?task=availability">Update Availability</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/workers?task=update_personal_info">Update Personal Information</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><strong><a href="index.php/component/workers?task=ask_password_change">Change Password</a></strong></h3>\r\n<div class="shrink_div"> </div>\r\n</div>', 1, 'loader-menu-position', 0, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 1, 'mod_custom', 2, 1, '{"prepare_content":"1","backgroundimage":"","layout":"_:default","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}', 0, '*'`

并且此行的预期输出是。

90 'Loader Menu' '' '<div class="arrowlistmenu">\r\n<h3 class="menuheader"><a href="index.php/component/ordersoncalendar">View Orders</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/reportmaster/?task=report_details">Time Sheets</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/availabilitycalendar?task=availability">Update Availability</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><a href="index.php/component/workers?task=update_personal_info">Update Personal Information</a></h3>\r\n<div class="shrink_div"> </div>\r\n<h3 class="menuheader"><strong><a href="index.php/component/workers?task=ask_password_change">Change Password</a></strong></h3>\r\n<div class="shrink_div"> </div>\r\n</div>' 1 'loader-menu-position' 0 '0000-00-00 00:00:00' '0000-00-00 00:00:00' '0000-00-00 00:00:00' 1 'mod_custom' 2 1 '{"prepare_content":"1","backgroundimage":"","layout":"_:default","moduleclass_sfx":"","cache":"1","cache_time":"900","cachemode":"static"}' 0 '*'

正如我所说,文件有数百万行,很难将所有格式的行放在这里,但至少我们得到了一些可以解析以上行的东西,那也是可以接受的。 请建议我如何实现它,因为这个文件有数百万条记录。

您可以使用以下正则表达式:

\s*,\s*(?=(?:(?:[^']*'){2})*[^']*$)

DEMO

似乎它只包含字符串和整数。所以你可以做匹配。

Matcher m = Pattern.compile("'([^']*)'|(\d+(?:\.\d+)?)").matcher(str);
while(m.find())
{
System.out.println(m.group(1));
System.out.println(m.group(2));
}