我有这样的代码:
val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => {
val parser:Parser = new AutoDetectParser()
val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE)
val config:TesseractOCRConfig = new TesseractOCRConfig()
val pdfConfig:PDFParserConfig = new PDFParserConfig()
val inputstream:InputStream = new ByteArrayInputStream(fp)
val metadata:Metadata = new Metadata()
val parseContext:ParseContext = new ParseContext()
parseContext.set(classOf[TesseractOCRConfig], config)
parseContext.set(classOf[PDFParserConfig], pdfConfig)
parseContext.set(classOf[Parser], parser)
parser.parse(inputstream, handler, metadata, parseContext)
handler.toString
}
使用Apache Tika从PDF解析文本的函数文字。
我想要的是这里的一个Try块,它运行在parser.parse上,如果它不能执行则返回一个空字符串。我不确定如何在Scala中构造这种逻辑。
答案 0 :(得分:4)
我认为你要找的是Try。
val extractInfo: (Array[Byte] => String) = (fp: Array[Byte]) => Try {
val parser:Parser = new AutoDetectParser()
...
handler.toString
} getOrElse("")
这样做会捕获正文中的任何错误,并通过返回空字符串从此错误中恢复。
答案 1 :(得分:2)
你可以写
try {
val parser:Parser = new AutoDetectParser()
val handler:BodyContentHandler = new BodyContentHandler(Integer.MAX_VALUE)
val config:TesseractOCRConfig = new TesseractOCRConfig()
val pdfConfig:PDFParserConfig = new PDFParserConfig()
val inputstream:InputStream = new ByteArrayInputStream(fp)
val metadata:Metadata = new Metadata()
val parseContext:ParseContext = new ParseContext()
parseContext.set(classOf[TesseractOCRConfig], config)
parseContext.set(classOf[PDFParserConfig], pdfConfig)
parseContext.set(classOf[Parser], parser)
parser.parse(inputstream, handler, metadata, parseContext)
handler.toString
} catch {
case e: Exception => ""
}
因为try
是Scala中的表达式,就像if
或match
一样。但是,如果您打算使用""
作为标记值(即,稍后通过检查结果是否为空来检查是否发生错误),请不要;改为使用Option[String]
或Try[String]
作为返回类型。