第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在每 4 個字符處拆分一個字符串?

在每 4 個字符處拆分一個字符串?

幕布斯7119047 2022-06-15 09:46:19
我有一個字符串,如果可能的話,我必須將其拆分為長度相等的子字符串。我發(fā)現(xiàn)這個解決方案只有在字符串長度是 4 的倍數(shù)時才有效。String   myString = "abcdefghijklm"; String[] split = myString.split("(?<=\\G....)");這將產(chǎn)生:[abcd, efgh, ijkl, m]我需要的是拆分“從字符串的末尾”。我想要的輸出應該如下所示:[a, bcde, fghi, jklm]我如何實現(xiàn)這一目標?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻1898條經(jīng)驗 獲得超8個贊

這應該這樣做:


String[] split = myString.split("(?=(....)+$)");

// or

String[] split = myString.split("(?=(.{4})+$)");

它的作用是:僅當空字符串前面有 4 個字符的倍數(shù)時才拆分空字符串,直到到達輸入結(jié)束。


當然,這有一個糟糕的運行時間 (O(n^2))。您只需自己拆分即可獲得線性運行時間算法。


正如@anubhava 所提到的:


(?!^)(?=(?:.{4})+$)如果字符串長度是 4 的倍數(shù),以避免出現(xiàn)空結(jié)果


查看完整回答
反對 回復 2022-06-15
?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

正則表達式對此真的是不必要的。我也不認為這對遞歸來說是一個好問題。下面是一個 O(n) 的解決方案。


public static String[] splitIt(String input, int splitLength){


    int inputLength = input.length();

    ArrayList<String> arrayList = new ArrayList<>();


    int i = inputLength;

    while(i > 0){

        int beginIndex = i - splitLength > 0 ? i - splitLength : 0;

        arrayList.add(0, input.substring(beginIndex, i));

        i -= splitLength;

    }



    return arrayList.toArray(new String[0]);

}


查看完整回答
反對 回復 2022-06-15
?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

無需使用正則表達式。相反,您可以遞歸地構(gòu)建頭部字符串列表并返回尾部。


import java.util.*;


public class StringChunker {

    public static void main(String[] args) {

        String str = "abcdefghijklm";


        System.out.println(Arrays.toString(chunk(str, 4)));        // [abcd, efgh, ijkl, m]

        System.out.println(Arrays.toString(chunk(str, 4, true)));  // [a, bcde, fghi, jklm]

    }


    public static String[] chunk(String str, int size) throws IllegalArgumentException {

        return chunk(str, size, false);

    }


    public static String[] chunk(String str, int size, boolean reverse) throws IllegalArgumentException {

        return chunk(str, size, reverse, new ArrayList<String>());

    }


    private static String[] chunk(String str, int size, boolean reverse, List<String> chunks) throws IllegalArgumentException {

        if (size < 1) {

            throw new IllegalArgumentException("size must be greater than 0");

        }

        if (str.length() < size) {

            if (reverse) {

                chunks.add(0, str); // Reverse adds to the front of the list

            } else {

                chunks.add(str); // Add to the end of the list

            }

            return chunks.toArray(new String[chunks.size()]); // Convert to an array

        } else {

            String head, tail;

            if (reverse) {

                head = str.substring(str.length() - size, str.length());

                tail = str.substring(0, str.length() - size);

                chunks.add(0, head);

            } else {

                head = str.substring(0, size);

                tail = str.substring(size);

                chunks.add(head);

            }

            return chunk(tail, size, reverse, chunks);

        }

    }

}


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號