Scala在\ n上拆分

时间:2018-08-13 16:08:15

标签: scala

我有一个文本文件,其内容如下: “ \ n \ n \ n \ n \ n \ n \ n \ n \ t \ n \ t \ t \ t \ n \ t \ t \ t \ t \ t \ t \ n \ t \ t \ t \ t \ n \ t \ t \ n \ n \ n \ t \ n \ t \ t \ n \ t \ t \ t \ t \ t热线:+49 40-300 51 701 \ n \ t \ n \ t \ n \ tLanguages \ n \ t \ n \ t \ n \ t \ t \ n \ t \ t \ n \ t \ t旅行计划\ n \ t \ n \ t \ n \ n \ n \ n \ n \ t \ t \ n \ n \ t \ t \ n \ t \ t \ t \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ t \ t \ t \ t \ t \ n \ t \ t \ t \ t \ n \ t \ t \ t \ t \ n \ t \ t \ t \ t \ n \ n \ t \ t \ n \ n \ t \ t \ n \ t \ t \ t \ t \ t \ tBook \ tBook \ t来自€的套餐59 \ n \ t住宿和抵达\ n \ t音乐套餐\ n \ t海事套餐\ n \ t汉堡为家庭\ n \ t体验汉堡和文化\ n \ n \ n \ n \ n \ t酒店起价€24 \ n \ t在线预订现在!\ n \ tTheme酒店\ n \ t按位置提供的酒店\ n \ t特惠信息\ n \ t来自AZ的酒店\ n \ t其他住宿\ n \ n \ n \ n \ n \ t门票从€8 \ n \ t立即在线预订\ n \ t汉堡音乐\ n \ t汉堡海上\ n \ t观光游览和城市漫步\ n \ t博物馆与展览\ n \ t汉堡为家庭\ n \ n \ n \ n \ n \ t汉堡卡\ n \ t现在在线预订\ n \ t所有好处一目了然\ n \ t常见问题\ n \ n \ n \ n \ n \ t团体旅行\ n \ t预订请求\ n \ t汉堡指南和主题游\ n \ n \ n \ n \ n \ n \ n \ t \ n \ t \ t优惠\ n \ n \ t \ t \ n \ n \ t \ t \ n \ n \ t \ t汉堡卡\ n \ t \ t免费乘坐巴士,铁路和渡轮(HVV),并为150多名游客提供高达50%的折扣... \ n \ n \ t \ n \ t \ n \ t \ t \ n \ t \ t \ t \ n \ t \ t \ t \ t从10,50 EUR \ n \ t \ t \ t \ n \ t \ t \ n \ n \ t \ n \ n \ n \ n \ n \ n \ n \ t景点\ t汉堡的最佳\ n \ t市政厅\ n \ t“ Michel” \ n \ tSt。 Pauli&Reeperbahn \ n \ tElbphilharmonie \ n \ tJungfernstieg \ n \ tMiniatur Wunderland \ n \ tTierpark Hagenbeck \ n \ t关于Alster的所有信息\ n \ tBlankenese \ n \ n \ n \ n \ n \ t汉堡海事\ n \ t城市海岸汉堡\ n \ t汉堡港\ n \tLandungsbrücken\ n \ t鱼市场\ n \ tSpeicherstadt \ n \ t在易北河上\ n \ t港口城市\ n \tWillkomm-Höft\ n \tÖvelgönne\ n \ n \ n \ n \ n \ n \ t具有历史意义的汉堡\ n \ t旧易北河隧道\ n \ t“

我想在\ n上拆分它。我尝试过

string.split("\n")
string.split('\n') 
string.split("""\n""") 
string.split("\\n")

这似乎无济于事。如何在Scala中完成?

3 个答案:

答案 0 :(得分:1)

由\ n分隔,然后由\ t分隔,展平,然后删除空字符串。

var lines = Source.fromFile("/Users/rasika/Documents/example.txt").getLines.mkString

val result = lines.split("\\\\n").flatMap(_.split("\\\\t")).filter(_.nonEmpty).toList

结果

  

咨询热线:+49 40-300 51 701
  语言
  旅行计划
  书
  自€59起的套餐
  住宿和到达
  音乐包
  海运包裹
  汉堡家庭之旅
  体验汉堡与文化
  酒店起价€24
  立即在线预订!
  主题酒店
  各地区的酒店
  特别优惠
  A-Z酒店
  其他住宿
  门票8欧元起
  立即在线预订!
  汉堡音乐剧
  汉堡海事
  观光游览和城市漫步
  博物馆与展览馆
  汉堡家庭之旅
  汉堡卡
  立即在线预订!
  所有好处一目了然
  常见问题
  团体旅行
  预订请求
  汉堡导游和主题游
  优惠
  汉堡卡
  免费乘坐巴士,铁路和轮渡(HVV),并为150多个游客提供高达50%的折扣...
  从10,50 EUR
  输出超出截止极限。

答案 1 :(得分:0)

如果您要分割文本(即文字文本,而不仅仅是换行符)中的文字 \n,请尝试以下操作:

string.split("\\\\n")

在Java / Scala的正则表达式上下文中,文字反斜杠需要四个反斜杠。

答案 2 :(得分:0)

由于您要在换行符之间进行拆分,而io.Source.fromFile.getLines在换行符之间进行拆分,因此您需要使用

一次性读取整个文件
val string = io.Source.fromFile(filepath).mkString

按照this answer。然后您的尝试应该可以奏效,例如

string.split('\n')