/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
if (rawValue == null || rawValue.isEmpty()) {
return "";
}
// Проверяем формат массива: 2[length1]value1[length2]value2
if (!rawValue.startsWith("2[") || rawValue.length() < 5) {
return rawValue;
}
try {
int pos = 1;
for (int i = 0; i < 2; i++) {
// Ищем открывающую скобку
int openBracket = rawValue.indexOf('[', pos);
if (openBracket == -1) break;
// Ищем закрывающую скобку
int closeBracket = rawValue.indexOf(']', openBracket);
if (closeBracket == -1) break;
System.
out.
println("openBracket=" + openBracket
); System.
out.
println("closeBracket=" + closeBracket
);
// Парсим длину элемента
String lengthStr
= rawValue.
substring(openBracket
+ 1, closeBracket
); System.
out.
println(lengthStr
); if (lengthStr.isEmpty()) {
// Пустая длина - значит элемент пустой
elements[i] = "";
pos = closeBracket + 1;
continue;
}
int length;
try {
length
= Integer.
parseInt(lengthStr
); break;
}
// Извлекаем значение
int start = closeBracket + 1;
int end = start + length;
System.
out.
println("start = " + start
); System.
out.
println("end = " + end
); if (end > rawValue.length()) {
elements[i] = rawValue.substring(start);
break;
}
elements[i] = rawValue.substring(start, end);
pos = end;
}
// Если оба элемента распарсились
if (elements[0] != null && elements[1] != null) {
return elements[0] + " - " + elements[1];
}
// Если что-то пошло не так, возвращаем как обычный параметр
}
return rawValue;
}
{
String s
= "2[158]1; Debit; 22618000460010339500; 50000 1; Credit; 23118000300001150500; 50000 2; Debit; 23118000300001150500; 50000 2; Credit; 22618000760010340500; 50000 [17]Данные для отчета";
System.
out.
println(parseParameter
(s
)); }
}