我相信人们会从这篇文章中得到很好的笑声,但对于我来说,我找不到一个分隔符来指示一个新的段落何时在一串文本中开始。单词和行?很容易,但段落似乎更难找到。我试过连续使用两个换行符,换行符和换行符的Unicode表示法,但没有成功。
编辑:我为我最初的问题的含糊之处道歉。为了回答一些问题,它是一个最初在windows上创建的基本文本文件。我正在使用RIM eclipse插件测试一些用Blackberry jde4.5打开和分析其内容的代码。虽然文件的来源将是windows (至少在可预见的将来),并且是基本的文本,但我无法控制它们是如何创建的(这是一个第三方来源,我无法访问它的创建方式)
发布于 2010-02-03 06:37:46
常见的用法中没有这样的分段符。
您可以假定一行中的两个或更多个换行符(带有可选的水平空格)表示一个段落换行。但这条“规则”也有很多例外。例如,当一个段落
然后继续..。就像这张。对于这类事情,可能没有解决方案。
根据@Aiden下面的评论编辑。(现在很明显,这与OP无关,但它可能与通过Google等发现问题的其他人相关)
与其试图从文本中逆向工程段落,也许你应该考虑指定你的输入应该是(例如) Markdown语法;即StackOverflow支持的语法。Markdown Wiki包含指向多种语言的markdown解析器实现的链接。
(假设您对要解析为段落的文本的输入格式有一定的控制,等等。)
发布于 2010-02-03 12:57:41
纯文本文档中的段落通常由两个或多个行分隔符分隔。分行符可以是换行符(\n)、回车符(\r)或后跟换行符的回车符(\r\n)。这三种分隔符通常与操作系统相关联,但任何应用程序都可以使用任何类型的行分隔符自由编写文本。事实上,从不同来源(如网页)组合而成的文本可能包含两种或两种以上的分隔符。当你的应用程序读取文本时,无论它运行在什么平台上,它都应该始终检查所有三种行分隔符。
BufferedReader#readLine()就是这样做的,但当然它一次只读一行。简单的散文通常会作为代表段落的非空行和代表它们之间的空格的空行的交替序列返回。但不要指望它;注意多个空行,注意“空”行实际上可能包含空格(\u0020)和制表符(\u0009)等空格字符。
如果您选择不使用BufferedReader,则可能必须从头开始编写检测代码。Java不包括正则表达式支持,因此split()和java.util.Scanner不可用;除非使用returnDelims选项,否则StringTokenizer不区分单个分隔符和一行中的多个分隔符。然后,它一次返回一个字符的分隔符,因此您仍然需要编写自己的代码来确定您正在查看的分隔符是哪种类型。
发布于 2010-02-03 06:38:35
在换行符上,您可能需要查找CR LF序列(\r\n) -显然,答案将取决于文本格式。
https://stackoverflow.com/questions/2188265
复制相似问题