2017-09-03 81 views
3

我需要写一个方法groupify这需要2个参数:分离字符串转换成组

  1. ,我想打入组的字符串。
  2. 每组字母数。

所以,代码可以印刷由分成组,对第二参数指定的字母数字输入字符串的,如果没有足够的字母输入字符串填写一个字符串的所有群体,应该填写最后一组与"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)); 
    } 
} 

但我发现了以下异常:

异常线程 “main” java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:12

我应该怎么改?

回答

1

我更喜欢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的长度。

+0

@Charlesspi尝试接受某人的答案,如果它节省了你的时间。 – surajsn

-1

方法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小于零OR beginIndex > endIndex OR endIndex比字符串的长度更大。