【问题标题】:Get scanner to include but ignore quoted text?让扫描仪包含但忽略引用的文本?
【发布时间】:2012-04-15 16:47:18
【问题描述】:

基本上我的问题是,我需要解析 , 是分隔符的文本,但不应检查 " " 引号中的任何内容是否有分隔符。这是Scanner.skip 方法的用途吗?我会自己检查它,但我不明白如何在 Java 中编写正则表达式模式,其中令牌介于两个 " " 之间。我还想在正确的标记中包含任何引用的文本,该标记由有效的, 分隔。

【问题讨论】:

标签: java regex quotes java.util.scanner


【解决方案1】:

我不久前研究过这个问题,但没有找到足够快的解决方案。

因此,我将一个简单的自定义字符串拆分器(它会忽略引号之间的分隔符)合并到我从事的开源项目中:

QuoteAwareStringSplitter.java

例如:

public static void main( String[] args ) throws IOException
{
    String s = "ads,asdas,das,das, \"ahda,asd,as,d,a\", adsa";
    String[] tokens = QuoteAwareStringSplitter.splitLine( s );
    for ( String token : tokens )
    {
        System.out.println( token );
    }
}

打印:

ads
asdas
das
das
ahda,asd,as,d,a
 adsa

【讨论】:

  • 我希望有一种方法可以不涉及手动逐个字符地执行此操作,但如果是这样,我想这样的解决方案还不错。
  • 在某些时候它必须是一个字符一个字符。当您使用 QuoteIgnorringStringSplitter 之类的内容时,它会从您的代码中抽象出来。
  • 好吧,无论您选择什么库或解决方案,甚至是基于正则表达式的解决方案,都将通过char 设置char 作为其实现的一部分。它只会对你隐藏。正则表达式并不神奇...编辑:@DerMike 击败了我 :)
  • 当然可以,但我只是觉得有一种方法可以在标准 java 库中通过更高级别的抽象来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
相关资源
最近更新 更多