java - 由属性将字符串拆分为两部分

时间:2014-02-11 09:07:44

标签: java string split

如何将字符串拆分为两部分,没有分隔符,但第一部分是满足某个谓词的组,第二部分是其余部分(没有循环)?

我想在Java中处理字符串操作,并编写一个简单的程序,将单词转换为简化的piglatin版本。

所以规则集是

  • 如果一个单词以辅音组开头,请​​将该组放在单词的末尾并添加“ay”,例如dog -> ogday

  • 如果没有,请在此单词的末尾添加“way”,例如egg -> eggway

但是,如果在互联网上找到“在分隔符上拆分字符串”的各种示例,我发现没有“保留”分隔符。

在我最喜欢的语言haskell中,我会使用takeWhile或用Parsec-library(Parser组合器)编写的小解析器。但是,由于我是java的新手,我查看了String,Scanner,Pattern的文档(虽然这对我来说仍然有点神秘)但我找不到合适的解决方案。

我知道我可以使用一个简单的for循环来做这个,但我宁愿有一个处理字符串操作/解析的库。那会是哪个图书馆?或者我必须等待Java8和所有漂亮的fold / lambda东西。

编辑 - 更多例子

  • Oxford -> Oxfordway,因为它以元音开头
  • cyberpank -> erpankcybay,因为它以
  • 开头
  • prank -> ankpray
  • 我不区分沉默的辅音

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情

  • 第一个案例s = s.replaceAll("^([qwrtpsdfghklzxcvbnm])(.+)", "$2$1ay")
  • 第二个案例s = s.replaceAll("^([eyuioa].+)", "$1way");