How to ignore other occurrences like this when capturing a snippet of a string?

Asked

Viewed 69 times

0

I need to get just the ID of this line: "21 Julio André 21 Years" Since the ID is at the beginning of the line and is equal to age, the functions I tried to split the strings were Substring() and Split().

Follow the code excerpt below:

    String linha = "21 Julio André 21 Anos";    

    String id = linha.Substring(0, linha.IndexOf(' '));//Captura o valor do ID no começo da linha
    Console.WriteLine(id);
    
    String resto = linha.Replace(id, "");
    Console.WriteLine(resto);

What returns in the Console:

21

Julio André Anos

But it would be great if you came back:

21

Julio André 21 Anos

3 answers

1


Use a regular expression to replace the appropriate portion of text.

The class Regex has an overload of the method Replace(String, String, Int32) which allows to define the limit of substructions to be made:

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    String linha = "21 Julio André 21 Anos";    

    String id = linha.Substring(0, linha.IndexOf(' '));
    Console.WriteLine(id);

    //Instancia uma expressão regular que captura um ou mais números e um espaço
    Regex reg = new Regex(@"\d+\s");

    //Substitui apenas uma ocorrência
    String resto = reg.Replace(linha,"",1);
    Console.WriteLine(resto);
  }
}

Resulting in:

21
Julio André 21 Anos

Test in Repl.it.

1

If you’re sure the Id is always the beginning of the string and after the Id always has room, can do with the method Split() thus.

using System;

namespace Main
{
    class Program
    {
        static void Main(string[] args)
        {    
            string linha = "21 Julio André 21 Anos";    
            var arrayLinha = linha.Split(" ");

            Console.WriteLine(arrayLinha[0]);
            Console.WriteLine(string.Join(" ", arrayLinha, 1, arrayLinha.Length - 1));

            Console.ReadKey();
        }
    }
}

Upshot:

// 21
// Julio André 21 Anos

1

I used his own code, modifying only the end.

string linha = "21 Julio André 21 Anos";

// criei uma variável para determinar a separação entre ID e informação
int sp = linha.IndexOf(' ');

// utilizei a variável sp para pegar o ID
string id = linha.Substring(0, sp);
Console.WriteLine(id);

// somei 1 à variável sp para setar o início da substring
// e então subtrai sp do total da string
// pegando assim somente o texto depois da separação ID/informação
string resto = linha.Substring(++sp, linha.Length - sp);
Console.WriteLine(resto);

Output is independent of the number of characters for the ID.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.