String replace   zodpovězená otázka

VB.NET

Dobrý den,

Pracuji s textovým řetězcem, v němž jsou hodnoty odděleny mezerami. Problém je v tom, že počet mezer (oddělovače) není vždy konstantní. Někdy jsou odděleny jednou a někdy více mezerami. Pro další práci s těmito hodnotami je potřebuji dostat do pole což by v případě, že by počet mezer byl vždy stejný šlo jednoduše pomocí metody split. Chci se zeptat zda někoho nenapadá jakým způsobem tento problém jednoduše vyřešit.

Řeším to tak, že volám metodu split, kdy zadám jako oddělovač jednu mezeru a vzniklé stringové pole procházím cyklem a kontroluji zda je délka řetězce > 0 (což v případě mezer jdoucích za sebou není). Pokud je, přepisuji řetězec do nového pole a pak s ním dál pracuji. Příjde mi to složité a náročné na systémové prostředky.

V podstatě by mi stačilo přijít na to, jak jednoduše najít v řetězci všechny výskyty 2 a více mezer za sebou a nahradit je jen jednou mezerou.

'vstupní řetězec
"YYYY MM  DD   HH MM SE     Value"

'požadovaný řetězec
"YYYY MM DD HH MM SE Value"

Googlil jsem, přečetl jsem si články na tomto webu ale pořád nemohu přijít na nějaké lepší řešení, než které jsem popsal. Předem děkuji za jakoukoliv radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na to by se dalo dobře použít Regular Expressions (System.Text.RegularExpressions.Regex), ale na tu masku se mne neptejte, nebaví mě to vymýšlet protože je to zbytečně složité.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Ne, na to se vykašlete. Do regulárních výrazů se mi moc nechce. Nicméně mě jako naschvál ihned po odeslání příspěvku napadla taková věc.

Dim Radek as String = "YYYY MM  DD   HH MM SE     Value"

Do While Radek.Contains("  ")
  Radek.Replace("  ", " ")
Loop

Hledám pouze výskyt 2 mezer a vždy je vyměním za jednu. Cyklus jede dokud vše nevymění. Jako nápad se mi to líbí ale prozatím mi to nějak nefunguje, cyklus jede pořád dokola a nechce ty mezery vyměňovat :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to je jasné. Metoda Replace vrací novou instanci Stringu (s nahrazenými znaky) a tu původní nechá beze změny.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, už jsem k tomu také došel. Takže vyřešeno. Pokud by to někoho zajímalo přikládám kód.

Dim text as String = "YYYY MM DD  HH MM SE     Value"

Do While text.Contains("  ")
  text = text.Replace("  ", " ")
Loop

S pozdravem

Hellis

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Oddělovat to mezerama není vůbec dobrej nápad.

Já bych pro oddělení použil spíš středník nebo čárku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

S tím nic nenadělám, to jsou vstupní data, která v tomto formátu dostávám. Po předzpracování ve VB si to exportuju do DB a pak už se s tím dělá v poho.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

možná by to šlo i takto

        Dim text As String = "YYYY MM DD  HH MM SE     Value"
        Dim pole() As String = text.Split(" ")
        text = String.Join(" ", pole)
nahlásit spamnahlásit spam 0 odpovědětodpovědět
Dim text As String = "YYYY MM DD  HH MM SE     Value"
Dim pole() as String = text.Split(" ", System.StringSplitOptions.RemoveEmptyEntries)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

tak tomu říkám elegantní řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zírám a smekám. Toto mě fakt nenapadlo ;-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co takhle?

Imports System.Text.RegularExpressions
Module Module1
    Dim text As String = "YYYY MM DD  HH MM SE     Value"
    Dim rgx As New Regex("\s+")
    Dim result() As String = rgx.Split(text)
End Module

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback