How to do a split by numbers within the string?

2

Follow string:

1No começo Deus criou os céus e a terra. 2A terra era um vazio, sem nenhum ser vivente, e estava coberta por um mar profundo. A escuridão cobria o mar, e o Espírito de Deus se movia por cima da água.
3Então Deus disse:
— Que haja luz!
E a luz começou a existir. 4Deus viu que a luz era boa e a separou da escuridão. 5Deus pôs na luz o nome de “dia” e na escuridão pôs o nome de “noite”. A noite passou, e veio a manhã. Esse foi o primeiro dia.
6Então Deus disse:
— Que haja no meio da água uma divisão para separá-la em duas partes!
7E assim aconteceu. Deus fez uma divisão que separou a água em duas partes: uma parte ficou do lado de baixo da divisão, e a outra parte ficou do lado de cima. 8Nessa divisão Deus pôs o nome de “céu”. A noite passou, e veio a manhã. Esse foi o segundo dia.
9Aí Deus disse:
— Que a água que está debaixo do céu se ajunte num só lugar a fim de que apareça a terra seca!
E assim aconteceu.

Or if you prefer JSFiddle: link

I want it to return something like this:

1 No começo Deus criou os céus e a terra.
2 A terra era um vazio, sem nenhum ser vivente, e estava coberta por um mar profundo. A escuridão cobria o mar, e o Espírito de Deus se movia por cima da água.
3 Então Deus disse: — Que haja luz! E a luz começou a existir.

How can I separate each verse?

    
asked by anonymous 11.10.2017 / 15:49

1 answer

3

From what I have seen, each verse is immediately followed by letter, without another tab, right?

You resolve your problem in four steps:

  • Create a regular expression to find the number of each verse:
Regex r = new Regex("([0-9]+)[a-zA-Z]{0}"); // Pega o número completo "colado" a um texto
  • Replace all verse numbers with a tab that does not normally appear in the Bible:
string testamento = r.Replace(capitulo, "@");
  • Break the text as you normally would:
string[] versiculos = testamento.Split('@');
  • If you just wanted the Array with the verses, you can stop here - or enter (índice + 1) at the beginning of each Array element. But if you want to put it all together in one text, you can do the following:
testamento = ""; // já declarei o testamento lá em cima
for (int i = 0; i < versiculos.Length; i++)
{
    int numero = i + 1;
    testamento += numero.ToString() + " " + versiculos[i] + quebraDeLinha;
}

Epa, and that variable quebraDeLinha there, where does it come from? You declare it before the loop, with the following considerations:

  • If it's for a page you declare it like this:
string quebraDeLinha = "<br>"; // ou outra forma web de quebrar linha que lhe aprouver
  • If it's for a desktop or mobile application, maybe that's more interesting:
string quebraDeLinha = "\r\n";

One more thing: the Bible can be very large - perhaps even each will alone is too large for a single string. If the application hangs or gets too slow, I suggest studying the class StringBuilder ". It was created to deal with the creation and manipulation of very large texts.

    
11.10.2017 / 16:49