在Java中将字符串拆分为等长子串

在Java中将字符串拆分为等长子串

如何拆分字符串"Thequickbrownfoxjumps"在Java中大小相等的子字符串。例如。"Thequickbrownfoxjumps"四个等号的应该给出输出。

["Theq","uick","brow","nfox","jump","s"]

类似的问题:

在Scala中将字符串拆分为等长子串


呼唤远方
浏览 1166回答 3
3回答

胡子哥哥

下面是regex一行版本:System.out.println(Arrays.toString(     "Thequickbrownfoxjumps".split("(?<=\\G.{4})")));\G与上一次匹配结束的位置匹配的零宽度断言。如果有曾.没有先前的匹配,它匹配输入的开头,与\A..从上一场比赛结束到最后一场比赛的四个字符的位置匹配。向后看和\G是高级regex特性,并不是所有口味都支持。此外,\G在支持它的所有风格中都没有一致的实现。这个技巧将起作用(例如)爪哇、Perl、.NET和JGSoft,但在PHP(PCRE)、Ruby1.9+或TextMate(都是Oniguruma)。JavaScript的/y(粘性标志)不像\G,即使JS确实支持Lookback,也不能以这种方式使用。我应该说我不一定推荐如果你有其他选择的话,这个解决方案。其他答案中的非正则解可能更长,但它们也是自我记录的;对面那个。;)而且,这在Android中不起作用,Android不支持使用\G向后看。

MMMHUHU

好吧,用蛮力做这件事是相当容易的:public&nbsp;static&nbsp;List<String>&nbsp;splitEqually(String&nbsp;text,&nbsp;int&nbsp;size)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Give&nbsp;the&nbsp;list&nbsp;the&nbsp;right&nbsp;capacity&nbsp;to&nbsp;start&nbsp;with.&nbsp;You&nbsp;could&nbsp;use&nbsp;an&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;instead&nbsp;if&nbsp;you&nbsp;wanted. &nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;ret&nbsp;=&nbsp;new&nbsp;ArrayList<String>((text.length()&nbsp;+&nbsp;size&nbsp;-&nbsp;1)&nbsp;/&nbsp;size); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;start&nbsp;=&nbsp;0;&nbsp;start&nbsp;<&nbsp;text.length();&nbsp;start&nbsp;+=&nbsp;size)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret.add(text.substring(start,&nbsp;Math.min(text.length(),&nbsp;start&nbsp;+&nbsp;size))); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;}我不认为这真的值得用正则表达式。编辑:我不使用正则表达式的理由:这并不使用regexes的任何真正模式匹配。只是数数而已。I&nbsp;嫌疑犯虽然在大多数情况下,这并不重要,但上面的内容会更有效率。如果您需要在不同的地方使用可变的大小,那么您可以使用重复或一个助手函数来构建基于参数的regex本身。在另一个答案中提供的正则表达式首先没有编译(无效转义),然后不工作。我的代码第一次起作用了。这更多地证明了regexes与普通代码的可用性,IMO。
打开App,查看更多内容
随时随地看视频慕课网APP