Pular para o conteúdo principal

Trabalhando com Strings no C#

 

Introdução

O tipo string apesar de se comportar como um value type é na verdade um reference type. Apesar disso, devemos considerar que estamos trabalhando com um value type quando estamos manipulando strings, tendo em vista que este tipo de dado foi programado para funcionar como tal

A classe string possui uma série de métodos estáticos e não estáticos, que são utilizamos para formatação, concatenação, desmembramento, substring, etc. Vamos analisar alguns destes métodos da classe string.

 

StringBall


O método Substring

O método substring é um método não estático que permite pegarmos uma porção de uma string. Para utilizarmos o método substring, basta chamar o método a partir de uma variável string ou mesmo de uma string literal, conforme o exemplo.

string nome = "Testando da Silva";

string sobreNome = nome.Substring(12,5);

O método substring aceita como parâmetro a posição inicial que queremos obter e quantos caracteres devem ser extraídos. Caso não seja informado o número de caracteres a ser extraído, a função retornará o restante da string a partir da posição inicial informada.

 

O método IndexOf

O método IndexOf é utilizado para localizar uma determinada palavra dentro da string. Este método retornará a posição da string desejada. Caso a string não seja encontrada, será retornado o valor -1.

string nome = "Testando da Silva";
int pos = nome.IndexOf("Silva");
//A partir do índice 5
int pos2 = nome.IndexOf("Silva", 5);

Conforme vimos no exemplo, é possível informar a posição inicial para busca como um parâmetro adicional.

 

Funções ToUpper e ToLower

As funções ToUpper e ToLower permitem colocar uma string em letra minúsculas ou maiúsculas, conforme o exemplo a seguir.

string nome = "Maurício";

nome = nome.ToUpper();
nome = nome.ToLower();

Funções StartsWith e EndsWith

As funções startswith e endswith verificam se a string começo ou termina com uma determinada palavra ou caracter. Estas funções retornam um valor booleano (true ou false).

string arquivo = "comctl32.dll";

if(nome.StartsWith("com"))
    Console.WriteLine("Começa com COM!");

if(nome.EndsWith(".dll"))
    Console.WriteLine("É uma dll!");

 

Funções TrimStart, TrimEnd e Trim

As funções de Trim servem para remover espaços em branco das strings. A função TrimStart remove os espaços em branco do início da string, já a função TrimEnd remove os espaços em branco do final da string. A função Trim remove os espaços em branco do inicio e do fim da string.

     string nome = "   MAURICIO    ";

     nome = nome.TrimEnd();
     nome = nome.TrimStart();

     nome = nome.Trim();

 

Funções PadLeft e PadRight

As funções PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter especificado. Os exemplos a seguir mostra o uso das funções PadLeft e PadRight.

    string nome = "Mauricio";

    nome = nome.PadRight(10, ' ');
    // "Mauricio  "

    string codigo = "123";
    codigo = codigo.PadLeft(6, '0');
    // "000123"

 

Funções String.Join e String.Split

A função Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao contrário da função split, a função Join concatena um array de string inserindo um separador.

string linha = "Teste, 10, 20, 10/06/2007";

string[] campos = linha.Split(',');

string linhaNova = String.Join(';', campos);

 

A Função String.Format

A função String.Format é uma das funções mais versáteis da classe string. Esta função permite a criação de uma string baseada em um padrão. Podemos colocar dentro do padrão da string de formatação alguns tokens que poderam ser substituídos por variáveis passadas por parâmetro no comando format.

string teste = String.Format("Vou colocar o {0} aqui.", "parâmetro");

No exemplo acima, o padrão da string (primeiro parâmetro) contém um token {0}. Este token indica que este valor deve ser substituido pelo segundo parâmetro passado para a função (neste caso a palavra “parâmetro”).

sTeste = String.Format("Formatação de string com {0} parâmetro. ",
    "Agora são {1}. Valor numérico: {2}", 1, Now(), 15.5);

No exemplo acima, temos o padrão da string com mais de um token, com números de 0 à 2. A função também recebe 3 parâmetros adicionais que correspondem aos valores que serão substituídos na string. Além de informarmos os tokens, podemos informar regras de formatação que serão utilizadas de acordo com o tipo de dado passado por parâmetro, conforme o exemplo,

sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", dtHoje);
sTeste = String.Format("Formatação do número inteiro: {0:D}.", iNumero);
sTeste = String.Format("Formatação do número inteiro: {0:D4}.", iNumero);

 

A classe StringBuilder

Apesar da versatilidade da classe string, operações com string podem consumir muitos recursos e causar perda de desempenho. Isto ocorre porque a cada operação o framework cria um novo buffer para a string resultante da operação, ao invés de aproveitar o buffer que está sendo utilizado. Isto é mais aparente em operações de concatenação.

Para não criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text. Esta classe permite a criação de strings aproveitando o buffer utilizado, o que torna o código mais eficiente.

No exemplo a seguir temos um trecho de código com uma operação feita de forma ineficiente e outra mais eficiente usando o stringBuilder, veja a diferença.

// Codigo ineficiente
string sql;
sql =  "SELECT * FROM Products";
sql += " WHERE CategoryId=1 AND";
sql += "       AND UnitPrice>10";

// Codigo Eficiente
StringBuilder sb =
    new StringBuilder();

sb.Append("SELECT * FROM Products");
sb.Append(" WHERE CategoryId=1 AND");
sb.Append("       AND UnitPrice>10");

sql = sb.ToString();

 

Fonte 

.net Maniacs

Comentários

  1. Show de bola o artigo, que bom, mais uma opção pra aprender um pouquinho mais de programação. Vi que voce me segue, tentei retribuir mas não estou conseguindo seguir ninguem, a tela de seguidores fica sem nada, isso não é so aqui, todos blogs que tentei.

    ResponderExcluir
  2. Olá Paulo esse artigo é ótimo mesmo, não é de minha autoria mas achei que seria legal ter ele aqui, como mais uma fonte de consulta, se estiver interessado dê uma passada no .net Maniacs (fonte) para verificar outros ótimos artigos, obrigado pelo comentário, quanto a esse problema verifiquei várias pessoas reclamando no twitter essa semana, vamos esperar que logo tudo se normaliza com o pessoal do google, abraços..

    ResponderExcluir
  3. O amigo deve ser como o dinheiro, cujo valor já conhecemos antes de termos necessidade dele,
    por isso não vou fazer tal e qual o avozinho infeliz: Em vão,por toda parte,os óculos procura
    Tendo-os na ponta do nariz! E eu aprendi que para se crescer como pessoa e preciso me cercar de gente mais inteligente do que eu. Obrigado por serem meus amigos.
    Um bom final de semana para todos.
    Abraços forte

    ResponderExcluir
  4. Oi Du, estou com um problema que pensei que pudesse me ajudar. Tem um maldito pop up abrindo em meu blog e que também já vi abrindo aqui no programero, não sei se vc já percebeu isso.
    Não é sempre que isso acontece, e também não é sempre nos mesmo links de redirecionamento.
    Você já percebeu isso em seu blog? Se já viu já tentou excluir essa porcaria?
    Tem idéia de como retirar isso? Estou preocupada com isso e não sei como resolver. Se puder me dar uma luz, eu agradeço. Aguardo sua resposta.
    Tchau, Du e desculpe te incomodar com essas coisas, mas só pude pensar em você nesse caso, já que ví o mesmo tipo de coisa aqui.
    Boa semana!

    ResponderExcluir
  5. Valeu ,estou iniciando com C# acredito que encontrei o lugar certo, obrigasdo.

    ResponderExcluir
  6. Meu nobre amigo o IndexOf não busca uma palavra em uma string e sim um conjunto de caractere iguais em uma string em exemplo cassico:

    quero procura uma palavra "porno" de uma string "mulheres em pornografia"
    IndexOf vai dizer que a palavra porno existe dentro desta string...
    sabemos que não tem
    porno != pornografia

    at +

    ResponderExcluir
  7. Olá aldisseia, muito obrigado pela correção, sabemos bem a diferença, mas nunca é de mais deixarmos claro questões de semântica ;-)

    ResponderExcluir
  8. Esse príncipe é uma bichona !

    ResponderExcluir
  9. Deixou bem claro, muito Obrigado

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Postagens mais visitadas deste blog

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei).
Iniciar Serviço:

uses WinSvc;
//
// start service
//
// return TRUE if successful
//
// sMachine:
//   machine name, ie: \SERVER
//   empty = local machine
//
// sService
//   service name, ie: Alerter
//
function ServiceStart(
  sMachine,
  sService : string ) : boolean;
var
//
  // service control
  // manager handle
  schm,
//
  // service handle
  schs   : SC_Handle;
//
  // service status
  ss     : TServiceStatus;
//
  // temp char pointer
  psTemp : PChar;
//
  // check point
  dwChkP : DWord;
begin
  ss.dwCurrentState := -1;
// connect to the service
  // contr…

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira:
Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE;
Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte
Control.Canvas.Font.Color:=clBlack;
//
// pinta a paleta / aba
Control.Canvas.brush.Color:=clSkyBlue;

PageControl1.Canvas.Rectangle(Rect);
Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption);
// pinta a parte interna (tabsheet)
PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color;
PageControl1.Pages[TabIndex].Repaint;

Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of
  0: Control.Canvas.Font.Color:=clBlack;
  1: Control.Canvas.Font.Color:=clWindow;
  2: Control.Canvas.Font.Color:=clRed;
en…

Listar arquivos existentes em diretório (Delphi)

Mostraremos uma maneira simples e prática para listar o conteúdo de um diretório com a opção de incluir nessa listagem os arquivos de seus subdiretórios. No exemplo abaixo temos um Edit para receber o diretório a ser pesquisado um CheckBox para indicar se os subdiretórios entrarão na pesquisa um botão para efetuar a pesquisa e um Memo para listar os arquivos encontrados, no final um Edit que receberá o cálculo final (em bytes) da soma do tamanho dos arquivos. procedure TForm1.Button1Click(Sender: TObject);
begin
  tamanhoTotal := 0;
  memLista.Lines.Clear;
  ListarArquivos(edtDiretorio.Text, chkSub.Checked);
  Edit1.Text := IntToStr( tamanhoTotal );
end;
procedure TForm1.ListarArquivos(Diretorio: string; Sub:Boolean);
var
  F: TSearchRec;
  Ret: Integer;
  TempNome: string;
begin
  Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);
try
while Ret = 0 do
begin
if TemAtributo(F.Attr, faDirectory) then
begin
if (F.Name <> '.') And (F.Name &l…