簡體   English   中英

如何在 Java 中使用循環將字符串分解為字母組?

[英]How do I break a string into groups of letters with a loop in Java?

我必須編寫一個將字符串分成組的方法。 用戶應該給出每組的字母數量,函數應該返回一個字符串,該字符串由分成幾組的輸入字符串組成。 例如,function(“HELLOYOU”, 2) 將返回“HE LL OY OU”。

您可以使用String.split()將字符串分解為單個字母的數組,然后組合成對的字母或更大的組等。

下面是一些示例代碼:

String[] splitInParts(String input, int size) {
    String[] letters = input.split("");
    String[] output = new String[letters / size];

    for (int i = 0; i < output.length; i++) {
        output[i] = "";
        for (int j = 0; j < size; j++) {
            output[i] = output[i] + letters[size * i + j];
        }
    }

    return output;
}

有很多樣板代碼缺失,例如,檢查循環參數是否在范圍內,檢查字符串是否為空等。但是,這是如何去做的一個粗略的想法。

您可以將輸入 String 的字符移動到一個新的 String 並在每個等於“size”的步驟上放置空格:

String function(String input, int parts) {
    StringBuilder result = new StringBuilder();
    int partCounter = 0;
    for (int i = 0; i < input.length(); i++) {
        partCounter++;
        result.append(input.charAt(i));
        if (partCounter == parts){
            result.append(" ");
            partCounter = 0;
        }
    }

    return result.toString();
}

您可以使用下面的代碼,該代碼接受一個String實例和一個 N int定義要拆分的字符數。 然后使用String實例的split方法

public static String[] split(String input, int len){
    // To prevent any NullPointerException being thrown
    if (StringUtils.isEmpty()) {
        return null;
    }
    // Split the input string based on a regex pattern
    return input.split(String.format("(?<=\\G.{%1$d})", len));
}

此處使用的正則表達式是(?<=\\\\G.{%1$d}) ,基於len2將變為(?<=\\\\G.{2}) 所以這意味着它將每 2 個字符拆分一次。 所以一串HELLOWORLD的輸出將是HE , LL , OW , OR , LD

如果您想將它們連接到一個由空格分隔的String ,您可以使用StringUtils#join方法

String joinedString = StringUtils.join(split, StringUtils.SPACE);

這會產生"HE LL OW OR LD"

所以一個多合一的方法是:

public static String separateNthCharacter(String input, int len) {
    // To prevent any NullPointerException being thrown
    if (StringUtils.isEmpty()) {
        return StringUtils.EMPTY;
    }

    String[] split = input.split(String.format("(?<=\\G.{%1$d})", len));
    return StringUtils.join(split, StringUtils.SPACE);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM