解决下载的电子书中换行的问题

摘要:
貌似是为了防止把html页面中表格撑爆,许多小说每隔几十个字符固定换行,这样下载到本地的时候看起来就很不爽,因此我就写了个程序将这些换行的文本来合并一下。

我在网上看小说时,习惯把它先全部下载到本地来看(一般自己写个蜘蛛程去抓)。貌似是为了防止把html页面中表格撑爆,许多小说每隔几十个字符固定换行,这样下载到本地的时候看起来就很不爽,因此我就写了个程序将这些换行的文本来合并一下。

基本原理如下:

  1. 通过trim函数去掉多余的空格
  2. 如果旧行是以标点符号结束,则认为是段落结束,需要加换行符,否则则去掉原来的换行符。

代码实现如下:

staticvoid Main(string[] args)
{
var lines = File.ReadAllLines(@"r:\1.txt",Encoding.Default);
File.WriteAllLines(@"r:\2.txt",JoinLine(lines));
}
staticstring[] JoinLine(string[] lines)
{
var newLine = from line in lines
selectRegex.Replace(line.Trim(), @"(.+\W)$", m => m.Groups[1].Value + "\n");
returnstring.Join("", newLine.ToArray()).Split('\n');
}

这个以标点符号是否为结束符来合并的算法没有什么大问题,但有一个地方无法解决,那就是"第一章 xxxxx"这样的标题栏实际上还是应该换行的,但上面的算法把它和下面的行合并了起来。因此我将其算法又改进了一下,添加了一个可以自己某些特殊行的条件检查,最终版本如下:

staticvoid Main(string[] args)
{
var lines = File.ReadAllLines(@"r:\1.txt",Encoding.Default);
File.WriteAllLines(@"r:\2.txt", JoinLine(lines, line => Regex.Match(line, "
.+?").Success));
}
staticstring[] JoinLine(string[] lines,Func<string,bool> exceptHanlder)
{
Func<string, string> GetNewLine = s => s + "\n";
var newLineQuery = from line in lines.Select(i => i.Trim())
let newLine = Regex.Replace(line, @"(.+\W)$", m => GetNewLine(m.Groups[1].Value))
select exceptHanlder(newLine) ? GetNewLine(newLine) : newLine;
returnstring.Join("", newLineQuery.ToArray()).Split('\n');
}

免责声明:文章转载自《解决下载的电子书中换行的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java生成UUID通用唯一识别码v-model值绑定,利用v-for循环下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vscode Vue格式化HTML标签换行问题

解决方法:在设置里面直接贴上代码: "vetur.format.defaultFormatter.html": "js-beautify-html","vetur.format.defaultFormatterOptions": {"js-beautify-html": {"wrap_attributes": "auto",}}, 注: // 对属性进行换...

Python读写文件之换行符

系统的换行符和路径分隔符 os模块可以获取当前系统的换行符和路径分隔符 windows操作系统 >>> os.linesep ' ' >>> os.sep '\' linux操作系统 >>> import os >>> os.linesep #换行符 ' ' >...

Log4net中换行符

在log4net节点中 <appender name="DebugLogFileAppender" type="log4net.Appender.FileAppender">   <param name="File" value="SystemLog\debug.txt"/>//定义输出文件   <param name="Ap...

第三方库-正则re

Python正则表达式里的单行re.S和多行re.M模式 Python 的re模块内置函数几乎都有一个flags参数,以位运算的方式将多个标志位相加。其中有两个模式:单行(re.DOTALL, 或者re.S)和多行(re.MULTILINE, 或者re.M)模式。它们初看上去不好理解,但是有时又会非常有用。这两个模式在PHP和JavaScripts里都有。...

秀丸编辑器在宏中设置文本替换正则表达式

替换文本中的换行符号为其他符号,这里我需要将换行符号替换为逗号; 首先建立一个以".MAC"后缀的文件,如a.MAC; 其次在文件中保存如下内容: replaceall "[ ]",",", regular; endmacro; 之后再秀丸编辑器的菜单栏"Marco"->"Load record" 点击Browse选择刚才建立的文件,点击OK后....

关于在html 当中,换行的css样式总结

近在做web相关的项目,在项目当中遇到了相关的文字较长的时候出现超出页面显示的问题,所以要进行换行操作,在这里总结一下。 <style type="text/css"> /* 强制不换行 */ .nowrap{white-space:nowrap;} /* 允许单词内断句,首先会尝试挪到下一行,看...