fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. private static String parseParameter(String rawValue) {
  11. if (rawValue == null || rawValue.isEmpty()) {
  12. return "";
  13. }
  14. // Проверяем формат массива: 2[length1]value1[length2]value2
  15. if (!rawValue.startsWith("2[") || rawValue.length() < 5) {
  16. return rawValue;
  17. }
  18. try {
  19. int pos = 1;
  20. String[] elements = new String[2];
  21.  
  22. for (int i = 0; i < 2; i++) {
  23. // Ищем открывающую скобку
  24. int openBracket = rawValue.indexOf('[', pos);
  25. if (openBracket == -1) break;
  26.  
  27. // Ищем закрывающую скобку
  28. int closeBracket = rawValue.indexOf(']', openBracket);
  29. if (closeBracket == -1) break;
  30.  
  31. System.out.println("openBracket=" + openBracket);
  32. System.out.println("closeBracket=" + closeBracket);
  33.  
  34. // Парсим длину элемента
  35. String lengthStr = rawValue.substring(openBracket + 1, closeBracket);
  36. System.out.println(lengthStr);
  37. if (lengthStr.isEmpty()) {
  38. // Пустая длина - значит элемент пустой
  39. elements[i] = "";
  40. pos = closeBracket + 1;
  41. continue;
  42. }
  43.  
  44. int length;
  45. try {
  46. length = Integer.parseInt(lengthStr);
  47. } catch (NumberFormatException e) {
  48. break;
  49. }
  50. // Извлекаем значение
  51. int start = closeBracket + 1;
  52. int end = start + length;
  53. System.out.println("start = " + start);
  54. System.out.println("end = " + end);
  55. if (end > rawValue.length()) {
  56. elements[i] = rawValue.substring(start);
  57. break;
  58. }
  59.  
  60. elements[i] = rawValue.substring(start, end);
  61. pos = end;
  62. }
  63.  
  64.  
  65. // Если оба элемента распарсились
  66. if (elements[0] != null && elements[1] != null) {
  67. return elements[0] + " - " + elements[1];
  68. }
  69. } catch (Exception e) {
  70. // Если что-то пошло не так, возвращаем как обычный параметр
  71. }
  72.  
  73. return rawValue;
  74. }
  75. public static void main (String[] args) throws java.lang.Exception
  76. {
  77. String s = "2[158]1; Debit; 22618000460010339500; 50000 1; Credit; 23118000300001150500; 50000 2; Debit; 23118000300001150500; 50000 2; Credit; 22618000760010340500; 50000 [17]Данные для отчета";
  78.  
  79. System.out.println(parseParameter(s));
  80. }
  81. }
Success #stdin #stdout 0.21s 55912KB
stdin
Standard input is empty
stdout
openBracket=1
closeBracket=5
158
start = 6
end = 164
openBracket=164
closeBracket=167
17
start = 168
end = 185
1; Debit; 22618000460010339500;  50000 1; Credit; 23118000300001150500;  50000 2; Debit; 23118000300001150500;  50000 2; Credit; 22618000760010340500;  50000  - Данные для отчета