在Java中将字符串拆分为等长子串如何拆分字符串"Thequickbrownfoxjumps"在Java中大小相等的子字符串。例如。"Thequickbrownfoxjumps"四个等号的应该给出输出。["Theq","uick","brow","nfox","jump","s"]类似的问题:在Scala中将字符串拆分为等长子串
3 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
下面是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
TA贡献1834条经验 获得超8个赞
public static List<String> splitEqually(String text, int size) { // Give the list the right capacity to start with. You could use an array // instead if you wanted. List<String> ret = new ArrayList<String>((text.length() + size - 1) / size); for (int start = 0; start < text.length(); start += size) { ret.add(text.substring(start, Math.min(text.length(), start + size))); } return ret;}
这并不使用regexes的任何真正模式匹配。只是数数而已。 I 嫌疑犯
虽然在大多数情况下,这并不重要,但上面的内容会更有效率。 如果您需要在不同的地方使用可变的大小,那么您可以使用重复或一个助手函数来构建基于参数的regex本身。 在另一个答案中提供的正则表达式首先没有编译(无效转义),然后不工作。我的代码第一次起作用了。这更多地证明了regexes与普通代码的可用性,IMO。
添加回答
举报
0/150
提交
取消