3

This is my code and it is showing error at while.Index out of bound exception is coming.The substrings should be such that

  1. Max 50 characters per string
  2. No number should be broken - for example " 4318, 4466, 486," is acceptable but " 4318, 4466, 48" is not
  3. Substring should always start with one space and end with comma ","

can someone help me out with this please

 public class MyString {

/**
 * @param args

 */
static String input = " 4318, 4466, 486, 1698, 478, 590, 582, 1594, 486, 1690, 702, 378, 486, 586, 486, 1694, 486, 598, 538, 526, 486, 1694, 486, 622, 434, 630, 462, 1730, 422, 1754, 450, 586, 486, 1690, 498, 1682, 486, 586, 502, 606, 454, 1698, 478, 1694, 486, 1718, 458, 1686, 726, 1458, 646, 426, 486, 1694, 482, 1694, 486, 590, 482, 622, 490, 550, 490, 602, 450, 634, 466, 586, 486, 1730, 426, 1714, 494, 622, 446, 590, 494, 618, 450, 586, 490, 586, 486, 1730, 450, 586, 486, 590, 502, 1674, 530, 1650, 482, 1690, 558, 1622, 486, 1690, 486, 5298, 4306, 4466, 530, 1646, 486, 594, 650, 1502, 546, 1650, 490, 586, 486, 622, 522, 1622, 486, 602, 454, 634, 462, 1694, 482, 590, 486, 590, 486, 1694, 482, 1730, 450, 590, 498, 1638, 526, 1690, 498, 606, 458, 586, 486, 1698, 482, 1694, 482, 1690, 486, 1694, 486, 1698, 574, 494, 486, 1714, 462, 1690, 486, 626, 430, 610, 486, 590, 490, 622, 426, 610, 498, 618, 446, 1690, 486, 1734, 446, 590, 482, 590, 502, 606, 454, 590, 502, 582, 478, 1690, 486, 586, 506, 578, 482, 1686, 558, 1622, 674, 1506, 482, 1698, 590, 1606, 462, 1000";
char space=' ';
 static char comma=',';
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int start=0, end=0;
    while (end-1 < input.length()){

    start=end;
    end= start+ 50;

    String output= input.substring(start,end);
    if(output.charAt(start)==' ' && output.charAt(end-1)==',')
    {
    System.out.println(output);
    } 
    else 
    {

    while(!(output.charAt(end-1)==','))
    {

    end--;

    }
    output= input.substring(start,end);
    System.out.println(output);

    }
    }
    }



}
Ravi
  • 30,829
  • 42
  • 119
  • 173
riya
  • 33
  • 6
  • if end =0 the is end-1 =-1 (while (end-1 < input.length()){ ) and you get the exception – Jens Mar 29 '17 at 09:53

4 Answers4

1

I have made slight modification in your code.

class Ideone {

static String input = " 4318, 4466, 486, 1698, 478, 590, 582, 1594, 486, 1690, 702, 378, 486, 586, 486, 1694, 486, 598, 538, 526, 486, 1694, 486, 622, 434, 630, 462, 1730, 422, 1754, 450, 586, 486, 1690, 498, 1682, 486, 586, 502, 606, 454, 1698, 478, 1694, 486, 1718, 458, 1686, 726, 1458, 646, 426, 486, 1694, 482, 1694, 486, 590, 482, 622, 490, 550, 490, 602, 450, 634, 466, 586, 486, 1730, 426, 1714, 494, 622, 446, 590, 494, 618, 450, 586, 490, 586, 486, 1730, 450, 586, 486, 590, 502, 1674, 530, 1650, 482, 1690, 558, 1622, 486, 1690, 486, 5298, 4306, 4466, 530, 1646, 486, 594, 650, 1502, 546, 1650, 490, 586, 486, 622, 522, 1622, 486, 602, 454, 634, 462, 1694, 482, 590, 486, 590, 486, 1694, 482, 1730, 450, 590, 498, 1638, 526, 1690, 498, 606, 458, 586, 486, 1698, 482, 1694, 482, 1690, 486, 1694, 486, 1698, 574, 494, 486, 1714, 462, 1690, 486, 626, 430, 610, 486, 590, 490, 622, 426, 610, 498, 618, 446, 1690, 486, 1734, 446, 590, 482, 590, 502, 606, 454, 590, 502, 582, 478, 1690, 486, 586, 506, 578, 482, 1686, 558, 1622, 674, 1506, 482, 1698, 590, 1606, 462, 1000";
char space = ' ';
static char comma = ',';

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int start = 0, end = 0;
    int temp = 0;
    while (end < input.length()) {

        start = end;
        end = Math.min(start + 50, input.length());

        String output = input.substring(start, end - 1);
        if (output.charAt(0) == ' ' && output.charAt(output.length() - 1) == ',') {
            System.out.println(output);
            end--;
        } else {
            temp = output.length() - 1;
            while (temp!=-1 && output.charAt(temp) != ',') {
                temp--;
            }
            if(temp==-1)break;
            output = input.substring(start, start + temp + 1);
            System.out.println(output);
            end = start + temp + 1;
        }

    }
}
}

Demo

Ravi
  • 30,829
  • 42
  • 119
  • 173
  • this code is correct and it is giving the output as expected only the last number ie 1000 is not getting printed.Can you please suggest the necessary changes? – riya Mar 30 '17 at 08:07
  • yes, it won't as per your requirement, it should only print *Substring should always start with one space and end with comma ","* And, last one doesn't have – Ravi Mar 30 '17 at 09:47
0

I dont understand the question but I think you are looking for this

  public class Snippet {
    static String input = " 4318, 4466, 486, 1698, 478, 590, 582, 1594, 486,            1690, 702, 378, 486, 586, 486, 1694, 486, 598, 538, 526, 486, 1694, 486, 622, 434, 630, 462, 1730, 422, 1754, 450, 586, 486, 1690, 498, 1682, 486, 586, 502, 606, 454, 1698, 478, 1694, 486, 1718, 458, 1686, 726, 1458, 646, 426, 486, 1694, 482, 1694, 486, 590, 482, 622, 490, 550, 490, 602, 450, 634, 466, 586, 486, 1730, 426, 1714, 494, 622, 446, 590, 494, 618, 450, 586, 490, 586, 486, 1730, 450, 586, 486, 590, 502, 1674, 530, 1650, 482, 1690, 558, 1622, 486, 1690, 486, 5298, 4306, 4466, 530, 1646, 486, 594, 650, 1502, 546, 1650, 490, 586, 486, 622, 522, 1622, 486, 602, 454, 634, 462, 1694, 482, 590, 486, 590, 486, 1694, 482, 1730, 450, 590, 498, 1638, 526, 1690, 498, 606, 458, 586, 486, 1698, 482, 1694, 482, 1690, 486, 1694, 486, 1698, 574, 494, 486, 1714, 462, 1690, 486, 626, 430, 610, 486, 590, 490, 622, 426, 610, 498, 618, 446, 1690, 486, 1734, 446, 590, 482, 590, 502, 606, 454, 590, 502, 582, 478, 1690, 486, 586, 506, 578, 482,   
1686, 558, 1622, 674, 1506, 482, 1698, 590, 1606, 462, 1000";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int start=0, end=0;
        String[] a=input.split(",");
        System.out.println(a);
        for (int i = 0; i < a.length; i++) {

            System.out.print(a[i]);
            if(!(a.length-1==i))
            {
            System.out.print(",");
            }   
        }
    }
}
  • I want the substrings each with maximum 50 characters and each substring should start with a space and end with a comma. And a substring like " 4318,4466," will do but not " 4318,44" – riya Mar 29 '17 at 10:17
0
 while(!(output.charAt(end-1)==','))    
{    
end--;    
}

change it to

 while(!(output.charAt(end-1)==','))
    {

  if(end>=1)
    end--;
  else
    break;

    }

You will not get error but you may want to change else part. Also, you didn't ask specifically but check this link out.

How to split a string in Java

Community
  • 1
  • 1
nerdicsapo
  • 427
  • 5
  • 16
0
public class StringSplitTest
{
    static String input = " 4318, 4466, 486, 1698, 478, 590, 582, 1594, 486, 1690, 702, 378, 486, 586, 486, 1694, 486, 598, 538, 526, 486, 1694, 486, 622, 434, 630, 462, 1730, 422, 1754, 450, 586, 486, 1690, 498, 1682, 486, 586, 502, 606, 454, 1698, 478, 1694, 486, 1718, 458, 1686, 726, 1458, 646, 426, 486, 1694, 482, 1694, 486, 590, 482, 622, 490, 550, 490, 602, 450, 634, 466, 586, 486, 1730, 426, 1714, 494, 622, 446, 590, 494, 618, 450, 586, 490, 586, 486, 1730, 450, 586, 486, 590, 502, 1674, 530, 1650, 482, 1690, 558, 1622, 486, 1690, 486, 5298, 4306, 4466, 530, 1646, 486, 594, 650, 1502, 546, 1650, 490, 586, 486, 622, 522, 1622, 486, 602, 454, 634, 462, 1694, 482, 590, 486, 590, 486, 1694, 482, 1730, 450, 590, 498, 1638, 526, 1690, 498, 606, 458, 586, 486, 1698, 482, 1694, 482, 1690, 486, 1694, 486, 1698, 574, 494, 486, 1714, 462, 1690, 486, 626, 430, 610, 486, 590, 490, 622, 426, 610, 498, 618, 446, 1690, 486, 1734, 446, 590, 482, 590, 502, 606, 454, 590, 502, 582, 478, 1690, 486, 586, 506, 578, 482, 1686, 558, 1622, 674, 1506, 482, 1698, 590, 1606, 462, 1000,";
    static ArrayList chunks = new ArrayList();
    static char comma = ',';
    static String commaString = ",";
    static boolean more = true;
    static int startIndex = 0;
    static String str = null;
    static int splitIndex = 50;
    static int remainingInputLength = 0;

    public static void main(String[] args)
    {
        while (more)
        {
            str = input.substring(startIndex, startIndex + splitIndex);
            if (str.endsWith(commaString))
            {
                startIndex += 50;
            }
            else
            {
                splitIndex = str.lastIndexOf(comma) + 1;
                str = input.substring(startIndex, startIndex + splitIndex);
                startIndex += splitIndex;
            }
            chunks.add(str);

            remainingInputLength = input.substring(startIndex).length();
            if (remainingInputLength == 0) 
            {
                more = false;
            }
            else 
            {
                if (remainingInputLength >= 50)
                    splitIndex = 50;
                else
                    splitIndex = remainingInputLength;
            }
        }
        for (String s: chunks) System.out.println(s);
    }
}
VivekRatanSinha
  • 596
  • 1
  • 4
  • 17