将连续的字符串数据拆分为所需的垂直输出

Posted

技术标签:

【中文标题】将连续的字符串数据拆分为所需的垂直输出【英文标题】:Split Consecutive string data into desired vertical output 【发布时间】:2019-11-18 13:11:14 【问题描述】:

我正在使用脚本在 jsp 页面中显示输出。

我从数据库中得到如下输出:

  out.println(a) ; //prints output Jan-2019 Feb-2019 March-2019 April-2019

  out.println(b) ; //prints output 100100200300

我正在尝试使用html css在jsp页面中打印输出,如下所示:

    Month           Price
    Jan-2019         100
    Feb-2019         100
    March-2019       200
    April-2019       300

我在谷歌搜索了很多仍然没有找到任何解决方案也尝试了不同的正则表达式代码仍然没有解决。任何帮助将不胜感激。

【问题讨论】:

b 变量没有任何分隔符,因此您如何确定在哪里拆分输入?还请包括您如何获得变量 ab 的值 我们如何知道字符串“100100200300”中的确切数字?它必须是一些分隔符 @Mark 我从数据库中得到了变量 b。在数据库中,数据存储为 100200300400。我们可以拆分以零结尾和以任意数字开头的数据,对吗? @Tom 不,您不能这样做,因为价格可能是 101,201,301,因此数据库数据看起来像 101201301。您的拆分逻辑将失败 @Mark no no price is 100200300400 like this only。没有101201 【参考方案1】:

这里是代码。它被故意做得更“冗长”,以便在您的数据馈送中更多地使用正则表达式。

String a = "Jan-2019 Feb-2019 March-2019 April-2019";
String b = "100100200300";

Pattern P1 = Pattern.compile("(\\w3,)-(\\d4)");
Pattern P2 = Pattern.compile("[1-9]+0+");

Vector<Integer> years = new Vector<>();
Vector<String> months = new Vector<>();
Vector<Integer> prices = new Vector<>();

Matcher m = P1.matcher(a);
while (m.find())

    months.add(m.group(1));
    years.add(new Integer(m.group(2)));


m = P2.matcher(b);
while (m.find()) prices.add(new Integer(m.group()));

// Useful for debugging, to make sure these are "parallel arrays"
// Parallel Arrays are almost *always* useful when regular-expressions & parsing is "happening."
System.out.println( "years.size():\t" + years.size() + '\n' +
                    "months.size():\t" + months.size() + '\n' +
                    "prices.size():\t" + prices.size() + "\n\n"   );

int len = years.size();
for (int i=0; i < len; i++)
    System.out.println( months.elementAt(i) + " " +
                        years.elementAt(i) + ":\t" +
                        prices.elementAt(i) );

System.exit(0);

这是输出:

years.size():   4
months.size():  4
prices.size():  4


Jan 2019:       100
Feb 2019:       100
March 2019:     200
April 2019:     300

【讨论】:

【参考方案2】:

要拆分a,请执行以下操作:

String[] months = a.split(" ");

要拆分b,请执行以下操作:

ArrayList<String> prices = new ArrayList<String>();
boolean isZero = false;
String tmpPrice = "";
for (int i = 0; i < b.length(); i++) 
    if (i + 1 >= b.length()) 
        tmpPrice = tmpPrice + b.charAt(i);
        prices.add(tmpPrice);
     else if (isZero && b.charAt(i) != '0') 
        prices.add(tmpPrice);
        tmpPrice = "" + b.charAt(i);
        isZero = false;
     else if (b.charAt(i) == '0') 
        isZero = true;
        tmpPrice = tmpPrice + b.charAt(i);
     else if (b.charAt(i) != '0') 
        isZero = false;
        tmpPrice = tmpPrice + b.charAt(i);
    

【讨论】:

它显示如下输出: 1 10 100 1 10 100 1 10 100 1 10 100 ,实际上输出应该垂直显示css,正如我在问题中提到的那样。我添加了
但它没有像上面提到的那样显示输出
@Tom b 的分隔符适用于我的输入 110100110100110100110100。也许这就是您对 HTML 部分进行编码的方式。请在问题中添加您的编码方式,我会尽力提供帮助 我应该在哪里输出。println(tmpPrice); ?? @Tom 请编辑您的问题并添加您打印价格和日期的方式。添加代码的 HTML 部分

以上是关于将连续的字符串数据拆分为所需的垂直输出的主要内容,如果未能解决你的问题,请参考以下文章

如何将python字典转换为所需的数据框输出? [复制]

将python中的LIST转换为所需的输出

关于如何在 Swift 中将字符串拆分为所需字符串数组的问题

如何将此混合行/列表转换为所需的输出。 (Oracle SQL/发行版:Ora12c)

xsl 未转换为所需的输出

如何查询/将数据转换为所需的格式