将字符串分成组

时间:2017-09-03 02:26:21

标签: java exception methods

我需要编写一个方法groupify,它有两个参数:

  1. 我想要分组的字符串。
  2. 每组的字母数。
  3. 因此,如果输入字符串中没有足够的字母来填写所有组,则代码可以打印一个字符串,该字符串由分组的输入字符串和第二个参数中指定的字母数组成。 ,它应该用"x"填充最后一组,所以如果我groupify("HELLODANY",2),它必须返回"HE LL OD AN YX"

    我的代码如下:

    package com.company;
    import java.util.Random;
    
    public class Main {
        public static String gropify(String message,int number) {
            String result="";
            int len =message.length();
            int s=0;
            int n=3;
            for(int x=0;x<len;++n) {
                s = s + number;
                result = result + message.substring(x,s);
            }
            return result;
        }
    
        public static void main(String[] args) {
            String message= "HELLODANY";
            System.out.println(gropify(message, 3));
        }
    }
    

    但我得到以下例外:

      

    线程中的异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:12

    我应该改变什么?

3 个答案:

答案 0 :(得分:2)

我希望StringBuilder超过许多String个连接(那些创建临时不可变String个实例)。接下来,您可以测试当前索引是否可以被number整除,如果是,则添加空格;然后将实际字符附加到StringBuilder。最后,通过计算消息长度的剩余部分除以数字来添加填充 - 附加许多X(s)。像,

public static String gropify(String message, int number) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < message.length(); i++) {
        if (i != 0 && i % number == 0) {
            sb.append(' ');
        }
        sb.append(message.charAt(i));
    }
    int pad = message.length() % number;
    for (int i = 0; i < pad; i++) {
        sb.append('X');
    }
    return sb.toString();
}

请注意,您当前的方法存在缺陷,当您点击s超过12的长度时,您将在循环体中添加message

答案 1 :(得分:1)

方法substring()用于获取特定String的子字符串。

此方法有两种变体,请仔细阅读以了解程序中错误使用substring方法,这就是您收到错误的原因。

String substring(int beginIndex):返回从指定索引(beginIndex)开始直到字符串结尾的子字符串。对于例如"Chaitanya".substring(2)会返回"aitanya"

此方法抛出IndexOutOfBoundsException如果beginIndex小于零或大于字符串(beginIndex<0||> length of String)的长度。

String substring(int beginIndex, int endIndex):返回从给定索引(beginIndex)开始直到指定索引(endIndex)的子字符串。

例如,“Chaitanya".substring(2,5)将返回"ait"

抛出IndexOutOfBoundsException如果beginIndex小于零,或者beginIndex > endIndexendIndex大于字符串的长度。

答案 2 :(得分:0)

以下代码给出正确的结果:

公共静态字符串groupify(字符串消息,整数大小){

    if (size == 0) return message;

    String result = "";

    int iteration = message.length()/size;
    int count = 0;

    for (int i =0; i< iteration; i++){
        count = count + size;
        result = result + message.substring(i*size,count) + " ";
    }
    int iteration2 = message.length() % size;
    int padreq = size - iteration2;
    int lastalpha = message.length() - iteration2;

    if (iteration2 != 0) {
        result = result + message.substring(lastalpha);

        for (int j = 0; j < padreq; j++) {
            result = result + "x";
        }
    }
    return result;
}