亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中將字符串拆分為等長子串

在Java中將字符串拆分為等長子串

呼喚遠方 2019-06-21 13:04:08
在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向后看。


查看完整回答
反對 回復 2019-06-21
?
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的任何真正模式匹配。只是數數而已。
  • 嫌疑犯

    雖然在大多數情況下,這并不重要,但上面的內容會更有效率。
  • 如果您需要在不同的地方使用可變的大小,那么您可以使用重復或一個助手函數來構建基于參數的regex本身。
  • 在另一個答案中提供的正則表達式首先沒有編譯(無效轉義),然后不工作。我的代碼第一次起作用了。這更多地證明了regexes與普通代碼的可用性,IMO。


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關注
  • 1228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號