Pular para o conteúdo principal

Strings

Manipulação de strings é essencial na programação. Veja como diferentes linguagens lidam com operações de string, concatenação e formatação.

Criação de Strings e Operações Básicas​

// String literals
const str1 = "Hello";
const str2 = 'World';
const str3 = `Template`;

// Concatenation
const combined = str1 + " " + str2;
const template = `${str1} ${str2}`;

// Length
const len = str1.length;

// Access character
const char = str1[0]; // 'H'

// Substring
const sub = str1.substring(0, 3); // 'Hel'

Métodos de Manipulação de Strings​

const str = "Hello World";

// Case conversion
str.toUpperCase(); // "HELLO WORLD"
str.toLowerCase(); // "hello world"

// Search
str.indexOf("World"); // 6
str.includes("World"); // true
str.startsWith("Hello"); // true
str.endsWith("World"); // true

// Replace
str.replace("World", "Universe"); // "Hello Universe"
str.replaceAll("l", "L"); // "HeLLo WorLd"

// Split
str.split(" "); // ["Hello", "World"]

// Join
["Hello", "World"].join(" "); // "Hello World"

// Reverse
str.split("").reverse().join(""); // "dlroW olleH"

// Repeat
"ha".repeat(3); // "hahaha"

// Trim
" hello ".trim(); // "hello"
" hello ".trimStart(); // "hello "
" hello ".trimEnd(); // " hello"

// Pad
"5".padStart(3, "0"); // "005"
"5".padEnd(3, "0"); // "500"

// Capitalize
str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); // "Hello world"

// Count occurrences
(str.match(/l/g) || []).length; // 3

// Check empty
str.length === 0; // false
str.length > 0; // true

Principais Conclusões​

  • Imutabilidade -- Strings são imutáveis em Java, Python, JavaScript, C# e Swift — cada "modificação" cria uma nova string. C e C++ usam arrays char mutáveis; Rust oferece tanto &str (slice imutável) quanto String (owned, mutável via métodos como push_str). Imutabilidade simplifica o raciocínio sobre concorrência e previne bugs de aliasing acidental. Escolha strings mutáveis (C/C++) apenas quando precisar de modificação in-place para código crítico de performance; caso contrário, imutabilidade é mais segura.

  • Codificação e Unicode -- Go e Rust tratam strings como bytes UTF-8; acessar um "caractere" em Go requer []rune(str) porque str[0] retorna um byte. Swift usa grapheme clusters para tratamento correto de emoji e caracteres combinantes. C usa arrays de bytes terminados em null sem garantia de codificação. Strings em Python 3 são Unicode por padrão. Para aplicações internacionalizadas, prefira Swift, Python ou Rust; para trabalho apenas ASCII ou de baixo nível, acesso por byte em C/Go é suficiente.

  • Interpolação de strings -- JavaScript usa template literals (`${name} is ${age}`); Python usa f-strings (f"{name} is {age}"); C# usa $"{name} is {age}"; Ruby usa "#{name} is #{age}". C depende de sprintf ou concatenação manual. Interpolação melhora a legibilidade e evita bugs de injeção por concatenação de strings. Escolha uma linguagem com interpolação de primeira classe para código de UI e logging.

  • Semântica de comprimento -- len(str) em Go retorna bytes; str.count de Swift retorna caracteres (grapheme clusters). str.len() de Rust é bytes; use str.chars().count() para caracteres. len(str) de Python conta code points Unicode. Isso importa para validação (ex: "máximo 10 caracteres") e truncamento. Para limites de comprimento voltados ao usuário, use APIs baseadas em caracteres (Swift, Python); para armazenamento ou rede, comprimento em bytes é o correto.

  • Operações comuns -- A maioria das linguagens fornece split, replace, trim, upper/lower e contains. Go usa funções de pacote (strings.Split, strings.Replace); Python e JavaScript usam métodos (str.split(), str.replace()). Zig e C exigem loops manuais ou bibliotecas externas. Se você faz processamento pesado de strings, prefira Python, JavaScript ou C# por suas APIs built-in ricas; para código embarcado ou de sistemas, espere implementar ou importar utilitários.