在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
提交
取消