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

如何在java中将字符串拆分为列,java,regex,talend,Java,Regex,Talend,我正在使用Talend解析具有以下类型行的文件,我尝试了tFileInputDelimted组件来解析它,但文本en closer“'”不起作用 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, 'Load

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

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,“加载器菜单”,“1”,“加载器菜单位置”,“0”,“0000-00-00:00”,“0000-00-00:00”,“0000-00-00-00:00”,“0000-00-00:00”,“0000-00-00:00”,“0000-00-00:00:00”,“0000-00-00:00”,“0000-00-00-00:00”,1,“mod\n\r\n\r\n\r\n\r\n\r\n\r\n\r\r\n\r\n\r\n>\r\n\r\n>\r\n>\r\r\n>\r\n>\r\n,“cachemode”:“static”}',0',*'`
此行的预期输出为

90
“加载程序菜单”
''
“\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n”
1.
“加载器菜单位置”
0
'0000-00-00 00:00:00'
'0000-00-00 00:00:00'
'0000-00-00 00:00:00'
1.
“mod_定制”
2.
1.
“{”准备内容“:”1“,”背景图像“:”布局“:”默认“,”模块类“:”sfx“,”缓存“:”1“,”缓存时间“:”900“,”缓存模式“:”静态“}”
0
“*”

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

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

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

请参见

它似乎只包含字符串和整数。因此您可以进行匹配

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

考虑使用适当的CSV解析器,避免复杂的正则表达式。这很好,但是当我的输入像这样的时候它失败了。编辑了同样的问题并添加了更多的细节。不期望。用期望的输出更新你的问题。好的,我增加了更多的场景,所以它会更好。你的前一个解决方案与第一个样本R工作得很好。哦,但是到了第二排,它失败了。是的。在结束这个问题之前,让我再测试一段时间,非常感谢您的帮助和高超的技巧。