public class TestSplit
{
private static final String REGEX = "(?!(\"){3})\"~(?!(\"){3})";
private Pattern pattern;
private static final String TEST_STR = "\"Test\"~\"\"\"\"~\"\"\" Test\"~\"Test \"\"\"~\"\"\"\"~\"Test \"\"\"~\"\"\" Test\"~\"\"";
private TestSplit()
{
pattern = Pattern.compile( REGEX );
} private void runTest()
{
String[] fields = splitRecord( TEST_STR ); System.out.println( TEST_STR );
for ( int i = 0; i < fields.length; i++ )
{
System.out.println( "Field[" + i + "] = [" + fields[i] + "]" );
}
} private String[] splitRecord( String line )
{
Matcher matcher = pattern.matcher( line );
pattern = matcher.pattern();
String[] fields = pattern.split(line, 5);
return fields;
} public static void main( String args[] )
{
TestSplit test = new TestSplit();
test.runTest();
}
}输出结果为:
"Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~""
Field[0] = ["Test"~""""~""" Test]
Field[1] = ["Test """~"""]
Field[2] = ["Test """~""" Test]
Field[3] = [""]希望得到的结果是:
"Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~""
Field[0] = [Test"~""""~""" Test]
Field[1] = [Test """~"""]
Field[2] = [Test """~""" Test]
Field[3] = []规则是:
1.按照指定的分割符分隔字符串
2.指定的分割符左右不能同时包含3个双引号。这里的分割符号是"~",得出的结果去掉了右边的双引号,但是没有去掉左边的双引号。
不知道如何写这个正则表达式。
REGEX = "(?!(\"){3})\"~(?!(\"){3})";
请高手指点!
{
private static final String REGEX = "(?!(\"){3})\"~(?!(\"){3})";
private Pattern pattern;
private static final String TEST_STR = "\"Test\"~\"\"\"\"~\"\"\" Test\"~\"Test \"\"\"~\"\"\"\"~\"Test \"\"\"~\"\"\" Test\"~\"\"";
private TestSplit()
{
pattern = Pattern.compile( REGEX );
} private void runTest()
{
String[] fields = splitRecord( TEST_STR ); System.out.println( TEST_STR );
for ( int i = 0; i < fields.length; i++ )
{
System.out.println( "Field[" + i + "] = [" + fields[i] + "]" );
}
} private String[] splitRecord( String line )
{
Matcher matcher = pattern.matcher( line );
pattern = matcher.pattern();
String[] fields = pattern.split(line, 5);
return fields;
} public static void main( String args[] )
{
TestSplit test = new TestSplit();
test.runTest();
}
}输出结果为:
"Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~""
Field[0] = ["Test"~""""~""" Test]
Field[1] = ["Test """~"""]
Field[2] = ["Test """~""" Test]
Field[3] = [""]希望得到的结果是:
"Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~""
Field[0] = [Test"~""""~""" Test]
Field[1] = [Test """~"""]
Field[2] = [Test """~""" Test]
Field[3] = []规则是:
1.按照指定的分割符分隔字符串
2.指定的分割符左右不能同时包含3个双引号。这里的分割符号是"~",得出的结果去掉了右边的双引号,但是没有去掉左边的双引号。
不知道如何写这个正则表达式。
REGEX = "(?!(\"){3})\"~(?!(\"){3})";
请高手指点!
解决方案 »
- 求解如何用java的MappedByteBuffer方法修改大文件
- 请人帮忙、javaGUI的事件处理
- 事件加到构造函数进去,科学吗??
- 怎么样解决这个java.lang.NullPointerException异常啊?
- java的简单问题,恳请赐教
- JAVA里怎么利用HTTP连接来进行数据传输?
- 现在主流的JAVA开发环境是什么工具呀?
- 关于加 wav声音的个小问题哦(在线急求 )
- Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
- 下面的代码有什么性能问题?面试题
- 系统从jdk1.3.1升级到jdk1.4.2需要注意哪些问题
- java 如何做文件索引?
如:"a"~"b"~"c", 分割的结果是a,b,c. 结果去掉了双引号
"a"~"b"""c""""~"d", 分隔结果是 a,b"c",d.结果也去掉了双引号。
Field[0] = [Test"~""""~""" Test]明明第一项是 Test,为什么是 Test"~""""~""" Test 啊?
否则根本没办法做。