Posição da substring
Em «The kit parses logs: ERROR at line 12, then INFO, then ERROR again.» o primeiro ERROR fica no índice 21, linha 1, coluna 22, e termina antes do 26. Pontos e colchetes são buscados como texto comum. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Calcular
- ERROR
- Índice
- 21
- Início
- 0
- Comprimento
- 67
- Comprimento da busca
- 5
Localizar a primeira ocorrência de uma frase é o primeiro passo de quase qualquer pipeline de texto: você situa um marcador e depois recorta, analisa ou destaca a partir desse índice de caracteres. Esta ferramenta de posição de substring recebe o texto de origem e um termo de busca não vazio e devolve o índice de caracteres com base zero da primeira coincidência literal, além de se foi encontrada, o deslocamento final exclusivo e a linha e a coluna com base um para saltar ao achado num editor. O start opcional permite retomar depois de uma coincidência anterior. A coincidência opcional sem maiúsculas cobre rascunhos mistos. Termos de busca vazios falham com entrada inválida para que trabalhos em lote nunca tratem a string vazia como coincidência em cada deslocamento.
O que significa achar a posição de uma substring e quando usar
A coincidência é literal: se você busca um ponto, um parêntese ou um colchete, esses caracteres são texto puro, não sintaxe de expressão regular, de modo que a ferramenta permanece previsível para não desenvolvedores e para pipelines que nunca devem se surpreender com caracteres especiais. Prefira esta calculadora quando a intenção de busca for achar a posição de uma substring, o índice de uma string, localizar a primeira ocorrência ou obter o deslocamento de um token.
Fontes típicas incluem linhas de log em que você precisa do primeiro marcador ERROR, trechos de configuração em que uma chave deve ser achada antes de cortar um valor, HTML ou markdown em que um delimitador de cabeçalho inicia uma seção, e células CSV ou TSV em que começa um delimitador ou um campo entre aspas. A coincidência opcional sem distinção de maiúsculas dobra o caso das letras para capturar o primeiro Hello, HELLO ou hello sem listar variantes.
Não use este produto quando precisar reescrever a coincidência — isso é uma intenção SEO distinta coberta por ferramentas de substituir a primeira e de localizar e substituir — nem quando precisar listar cada ocorrência, grupos de captura, lookarounds ou um motor regex multilinha.
Usos do dia a dia e limites práticos
Chame a ferramenta gratuita no navegador de posição de substring para checagens de colagem, demos em sala, QA de conteúdo e localização rápida sem instalar utilitário de desktop nem escrever trechos indexOf em cada linguagem. Um fluxo típico acha o primeiro marcador de seção, lê index e end e recorta o cabeçalho que segue. Outro fluxo percorre achados sucessivos enviando o end anterior como o próximo start, o que localiza a segunda ocorrência e as posteriores sem uma ferramenta de substituir tudo.
Não espere omissão consciente de tags HTML, campos de mesclagem de documentos estruturados, índices de clusters de grafemas nem colação específica de locale além da coincidência padrão sem maiúsculas — esses são problemas separados. Autores que enviam SDKs podem documentar text e find como campos obrigatórios e mostrar uma origem com várias coincidências em que só o primeiro índice é devolvido, mais um exemplo de erro de find vazio, para que integradores vejam os dois lados do contrato.
Casos de uso
Localizar o primeiro marcador de log ou erro
Analisadores e ferramentas de suporte acham o primeiro ERROR, TODO ou delimitador e depois recortam ou destacam a partir desse índice de caracteres sem reescrever o arquivo.
Retomar um percurso após um achado anterior
Envie o end exclusivo anterior como start para percorrer a segunda ocorrência e as posteriores uma a uma em templates, logs e arquivos de configuração.
Perguntas frequentes
O índice é com base zero ou com base um?
index é com base zero, o mesmo contrato que String indexOf de JavaScript, de modo que você pode passá-lo a slice. Quando há coincidência, position é o número de caractere com base um que se espera num editor, e line e column também são com base um.
O que acontece se o termo de busca estiver vazio?
Uma string find vazia é rejeitada para que pipelines nunca tratem a string vazia como coincidência em cada deslocamento; essas falhas não são cobradas.
A ferramenta de posição de uma substring é grátis?
A ferramenta do navegador roda grátis no seu dispositivo.
O find admite expressões regulares?
Não. O termo de busca é sempre tratado como string literal. Pontos, colchetes e outros metacaracteres de regex coincidem consigo mesmos para que o comportamento fique previsível em editores e trabalhos em lote.
Como encontro a segunda ocorrência?
Repita a busca informando como posição inicial o fim da primeira correspondência, 26 no exemplo. A busca começa ali e encontra o próximo ERROR sem percorrer de novo o começo do texto.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/str/index-of \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}'const res = await fetch("https://api.kit.forhosting.com/str/index-of", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/index-of",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/index-of", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"The kit parses logs: ERROR at line 12, then INFO, then ERROR again.","find":"ERROR"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/index-of", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "The kit parses logs: ERROR at line 12, then INFO, then ERROR again.",
"find": "ERROR"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.index_of",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_chars | 100000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
O que significa achar a posição de uma substring e quando usar
Achar a posição de uma substring significa percorrer a string de origem da esquerda para a direita — ou a partir de um deslocamento start opcional —, parar na primeira coincidência literal não sobreposta de um termo de busca e informar o índice de caracteres desse achado para que um passo posterior recorte, analise ou destaque a partir dali. Um termo de busca vazio lança invalid_input, o que protege trabalhos em lote do clássico erro de tratar a string vazia como coincidência entre cada caractere.
Contrato de entrada, rejeição de busca vazia e leitura da resposta
Quando há coincidência a resposta também inclui position como o índice humano com base um, end como o deslocamento final exclusivo, line e column como coordenadas de editor com base um, e matched como o recorte exato no achado para que uma busca sem maiúsculas ainda mostre a capitalização original. Uma coincidência ausente é um sucesso válido: found é false e index é menos um, o resultado honesto para um haystack que não contém a agulha. Use index com slice quando um script for recortar o restante; use line e column quando uma interface precisar rolar até o achado; use found sozinho quando um portão só precise saber se o marcador existe. Envie um corpo JSON com o campo string obrigatório text definido como a fonte que deseja examinar e o campo string obrigatório find definido como um termo de busca não vazio. O start opcional tem padrão zero e é o índice UTF-16 com base zero onde o percurso começa, de modo que você pode retomar depois de um achado anterior sem reexaminar o prefixo. case_insensitive opcional tem padrão false para maiúsculas exatas; defina true quando o primeiro rascunho de maiúsculas mistas ainda deva coincidir. Aliases são aceitos para clientes antigos: text também como input, value, s, content, source ou haystack; find como search, needle, substring, query ou pattern; start como from, from_index ou offset; case_insensitive como ignore_case, ci ou insensitive. Text ausente, find ausente, valor que não seja string, start negativo ou não inteiro, ou find vazio disparam invalid_input com uma mensagem que nomeia o problema, e essas falhas não são cobradas na API pré-paga. O comprimento é limitado a cem mil caracteres para que os percursos do navegador e do Worker fiquem delimitados. Em sucesso a resposta sempre inclui index como o deslocamento de caracteres com base zero ou menos um quando não houver, found como booleano, text e find como aplicados, start e case_insensitive como usados, length e find_length como comprimentos em caracteres, e method sempre igual a index_of.
Uso da API, preços, fluxos de trabalho e limites práticos
Use a API pré-paga do KIT quando um CMS, job ETL, backend de formulários, mesa de suporte, analisador ou cliente móvel precisar do mesmo localizador sob saldo a US$ 0,002 por item bem-sucedido; falhas de validação nunca consomem saldo após o motor rejeitar a requisição. Combine este endpoint com substituir a primeira quando um passo posterior precisar reescrever só aquele achado, ou com localizar e substituir quando cada coincidência precisar mudar, mas mantenha a posição de substring como landing própria para não misturar a intenção SEO com editores que mutam o texto.
Casos de integração
QA e fixtures determinísticos
Arneses de teste fixam index, found, line e column para que um refactor que passe a substituição, regex ou coincidência de find vazio falhe a integração contínua de imediato.
Perguntas técnicas
Como acho a posição de uma substring?
Envie JSON com text na string de origem e find em um termo de busca não vazio. O index da resposta é o deslocamento de caracteres com base zero da primeira coincidência, ou -1 se não houver. start e case_insensitive opcionais controlam onde e como o percurso roda.