按字符数分割字符串

时间:2017-10-12 07:56:58

标签: java arrays

String str = "abcdefghijklmnoprqstuvwxyz";
String[] array = new String[str.length()/4 +1];

在我工作之后,数组应该看起来像array = {"abcd","efgh","ijkl"...."yz"}。 这是我尝试过的:

WORK1:

int strIndex = 0;
int arrayIndex=0;   
for(strIndex=0; strIndex<str.length();strIndex++) {
    array[arrayIndex] += Character.toString(str.charAt(strIndex));  
    if((strIndex % 4 == 0) && (strIndex != 0 ))
    arrayIndex++;
}

=============================================== ========================= WORK2:

String str = "abcdefghijklmnoprqstuvwxyz";
String[] array = new String[str.length()/4 +1];
int start = 0;  // 0->4->8->12..
int end = 4;    // 4->8->12->16...

System.out.println("arraylength:"+array.length);
for(int i=0;i<array.length;i++) {
    array[i] = str.substring(start,end);
    start+=4;
    end+=4;
}

===========================================

WORK1:它为我提供abcde fghi jklm nopr qstu vwxy z的输出,这是错误的

WORK2:因为substring()跳过4,当它访问索引28时,它将成为Exception的原因。最后一部分应该是:(str.substring(24,26));,我想不出有效的方法处理这个。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:0)

您需要将Substring结尾限制为字符串Maximum lenght:

// pseudocode - you did not supply a tag for the language you are using
str.Substring(start,Math.Min(str.Count,end)) // Math.Min == C#

答案 1 :(得分:0)

WORK1应该稍作改动。

目前你正在推出&#34; abcde&#34;进入第一个数组元素只是因为你要添加第0,第1,第2,第3和第4个元素。你想在第4个元素之前分开而不是之后。试一试:

int strIndex = 0;
int arrayIndex=0;   

for(strIndex=0; strIndex<str.length();strIndex++) {

    if((strIndex % 4 == 0) && (strIndex != 0 ))
                        arrayIndex++;
    array[arrayIndex] += Character.toString(str.charAt(strIndex));   
}

希望这会有所帮助。让我知道你是如何上场的!

答案 2 :(得分:0)

检查下面的代码片段,它正如你所说的那样正常。 如果有任何问题,请告诉我。 (添加了一个仅用于验证答案的syso :))

        String str = "abcdefghijklmnoprqstuvwxyz";
    String[] array = new String[str.length()/4 +1];
    int start = 0;  // 0->4->8->12..
    int end = 4;    // 4->8->12->16...
    int length = str.length();

    System.out.println("arraylength:"+array.length);
    for(int i=0;i<array.length;i++) {

        array[i] = str.substring(start,end);
        start+=4;
        end+=4;

        System.out.println(array[i]);
if(end>length)
   end=length;

    }