我需要编写一个方法groupify
,它有两个参数:
因此,如果输入字符串中没有足够的字母来填写所有组,则代码可以打印一个字符串,该字符串由分组的输入字符串和第二个参数中指定的字母数组成。 ,它应该用"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
我应该改变什么?
答案 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 > endIndex
或endIndex
大于字符串的长度。
答案 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;
}