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})";
请高手指点!

解决方案 »

  1.   

    忘了加上一点,每个待分割的项都被双引号括起来。
    如:"a"~"b"~"c", 分割的结果是a,b,c. 结果去掉了双引号
    "a"~"b"""c""""~"d", 分隔结果是 a,b"c",d.结果也去掉了双引号。
      

  2.   

    "Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~"" 
    Field[0] = [Test"~""""~""" Test]明明第一项是 Test,为什么是 Test"~""""~""" Test 啊?
      

  3.   

    既然 "a"~"b"""c""""~"d" 第一项是 a那为什么 "Test"~""""~""" Test"~"Test """~""""~"Test """~""" Test"~"" 第一项就不能是 test 呢?数据格式本身就存在问题,如果每一项是采用引号包住的话,那在这一项中再有引号时一个引号得采用两个引号来转义,
    否则根本没办法做。