Разделить последовательные строковые данные на желаемый вертикальный вывод - PullRequest
0 голосов
/ 09 июля 2019

Я отображаю вывод на странице JSP, используя скриплеты.

Я получаю вывод из базы данных следующим образом:

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

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

Я пытаюсь напечатать вывод на странице jsp, используя html css следующим образом:

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

Я много искал в Google, но не нашел решения, которое пытался использовать другой код регулярного выражения, но он не решен. Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Вот код. Он был намеренно сделан более "многословным", чтобы облегчить более широкое использование регулярных выражений с вашим фидом данных.

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

Pattern P1 = Pattern.compile("(\\w{3,})-(\\d{4})");
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
1 голос
/ 09 июля 2019

Для расщепления 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...