Деление StringBuffer на более мелкие части - PullRequest
1 голос
/ 14 марта 2012

У меня большой струнный буфер, который я хотел бы разбить на более мелкие части. Строковый буфер выглядит так

"name1+name2+name3+name4+..........+name2000"

Где

name1=john
name2=prince 
and so on.

(у вас есть идея. Name1, name2, name3 обозначают настоящие имена различной длины)

Теперь я хотел бы сохранить имена в строковом массиве, где каждое положение содержит 200 имен.

string[0]="name1+name2+name3+........+name200";
string[1]="name201+name202+...."

Как бы я пошел для достижения этой задачи?

Ответы [ 5 ]

2 голосов
/ 14 марта 2012
StringTokenizer str = new StringTokenizer(<StringBufferObject>);
int count = 0;
int arrCount = 0;
StringBuffer temp;
String[] stringArr = new String[x];
while(str.hasMoreTokens()) {
    count++;
    if(count != 200) {
        temp.append(str.nextToken());
    }
    else {
    stringArr[arrCount] = temp;
    temp.delete(0,temp.length());
    count = 0;
    arrCount++;
}
1 голос
/ 14 марта 2012

Было бы намного проще разделить строку с помощью String.split (), если это возможно:

/* something like this */

String arrayOfStrings = inputString.split("\+");

Если вам нужно сохранить его как StringBuffer, вам придется зацикливать вводи токенизируй это сам.

Я думаю, это будет выглядеть примерно так:

public String[] getTwoHundredStrings(StringBuffer inputBuff, String someToken)
{
    String [] nameArray = new String [200];

    int currentPos = 0;
    int nextPos = 0;

    for ( int i = 0; i < 200; i ++ ) {

        nextPos = inputBuff.indexOf(someToken, currentPos);

        if ( nextPos < 0 ) {
            break;
        }

        String nextName = inputBuff.substring(currentPos, nextPos);

        nameArray[i] = nextName;        
        currentPos = nextPos;
    }   

    /* do some cleanup if nameArray has less than 200 elements */

    return nameArray;
0 голосов
/ 14 марта 2012

попробуйте использовать

String[] tempNames = new String(namesBuffer).split("+");

, а затем

int length = (tempNames.length / 200)+ (tempName.length % 200)
String[] names = new String[length];
for(int i = 0 ; i< tempNames.length ; i++){
   for(int j = 0 ; j < length ; j++)
       names[j] = tempNames[i];
}

надеюсь, это поможет

0 голосов
/ 14 марта 2012
  1. Разделить на "+", используя String.split("\\+")
  2. Получить патроны в меньших массивах, Arrays.copyOfRange(...)
  3. Присоединиться с помощью ГуаваСтоляр как Joiner.on("+").join(smallerArray)
0 голосов
/ 14 марта 2012

Вы должны иметь разделитель между каждым именем.Чтобы разбить строку, у нас должен быть какой-то разделитель.Если у вас есть разделитель, вы можете использовать subString () в цикле for.

...