ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

报文解析

2022-06-08 01:02:03  阅读:183  来源: 互联网

标签:convert return String int 报文 list start 解析


将字符串中的n[str]转换为n个str拼接,例如输入:3[m2[c]1[b]],则输出 mccbmccbmccb

 1 package org.example.test;
 2 
 3 import javafx.util.Pair;
 4 
 5 import java.util.LinkedList;
 6 import java.util.Scanner;
 7 
 8 public class Main {
 9     public static void main(String[] args) {
10         Scanner scanner = new Scanner(System.in);
11         String s = scanner.next();
12         scanner.close();
13         System.out.println(convert(s, 0, s.length()));
14     }
15     
16     public static String convert(String s, int start, int end) {
17         LinkedList<Pair<Integer, Integer>> list = new LinkedList<>();
18         int p, q = start - 1;   // p为'['的索引  q为']'的索引
19         while (true) {
20             p = s.indexOf('[', q + 1);
21             if (p == -1 || p >= end) {
22                 break;
23             }
24             q = match(s, p);
25             list.add(new Pair<>(p, q));
26         }
27         StringBuilder sb = new StringBuilder();
28         int lastQ = start - 1;
29         for (Pair<Integer, Integer> pair : list) {
30             p = pair.getKey();
31             q = pair.getValue();
32             int i = p - 1;
33             while (i >= start && Character.isDigit(s.charAt(i))) {
34                 i--;
35             }
36             int num = Integer.parseInt(s.substring(i + 1, p));
37             String convert = convert(s, p + 1, q);
38             if (i > lastQ) {
39                 sb.append(s, lastQ + 1, i + 1);
40             }
41             for (int j = 0; j < num; j++) {
42                 sb.append(convert);
43             }
44             lastQ = q;
45         }
46         return list.isEmpty() ? s.substring(start, end) : sb.append(s, list.getLast().getValue() + 1, end).toString();
47     }
48 
49     /**
50      * 查找'['匹配的']'的索引
51      * @param s 字符串
52      * @param p '['的索引
53      * @return 匹配的']'的索引
54      */
55     public static int match(String s, int p) {
56         int counter = 1;
57         for (int q = p + 1; q < s.length(); q++) {
58             if (s.charAt(q) == '[') {
59                 counter++;
60             } else if (s.charAt(q) == ']') {
61                 counter--;
62             }
63             if (counter == 0) {
64                 return q;
65             }
66         }
67         return -1;
68     }
69 }

 

标签:convert,return,String,int,报文,list,start,解析
来源: https://www.cnblogs.com/zhangshiyu/p/16353998.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有