Složitější parsování řetězce – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Složitější parsování řetězce – Java – Fórum – Programujte.comSložitější parsování řetězce – Java – Fórum – Programujte.com

 

Anonym
~ Anonymní uživatel
454 příspěvků
11. 3. 2015   #1
-
0
-

Zdravím!

Vytvářím takový projekt v Javě a narazil jsem na problém s parsováním řetězce, na který nemůžu vymyslet žádný (efektivní) postup :-( V podstatě se jedná o tohle:

Přijde mi číslo verze ve tomto formátu.

String vstup = "1.2.3";

A já potřebuju aby na výstupu bylo tohle.

int vystup = "1020300011";

Tzn. tečky zaměnit na 0 a na konec dát ty 0011.

Může ale nastat i situace, kdy přijde číslo verze v tomto formátu.

String vstup = "1.2.1358";

Tzn. na konci by bylo 4-ciferné číslo (jiná situace nastat nemůže). Pak by výstup měl vypdat takto.

int vystup = "1020135811";

Budu vděčný za Vaše rady!

Nahlásit jako SPAM
IP: 212.79.110.–
ingiraxo+15
Grafoman
11. 3. 2015   #2
-
0
-

#1 Anonym
řešení je samozřejmě víc, ale já bych použil asi toto 

public static long getVersion(String version)
{
    Pattern p = Pattern.compile("([0-9]+)\\.([0-9]+)\\.([0-9]{0,4})");
    Matcher m = p.matcher(version);

    if (m.matches()) {
        String zeros = new String(new char[4 - m.group(3).length()]).replace("\0", "0");
        return Long.valueOf(String.format("%s0%s0%s%s11", m.group(1), m.group(2), m.group(3), zeros));
    }
    return -1;
}

je možný sice použít splity na tečku, ale tohle mi přijde vhodnější, pokud řešíš přesněj formát verze

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
NotBeginner
~ Anonymní uživatel
185 příspěvků
16. 3. 2015   #3
-
0
-

Dneska mám dobrou náladu tak ti to tvé "složité parsování" - česky řečeno úpravu Stringu napíši :

Pokud budou jiné tvary použij analogii a rozšiř metodu upravString()

public class G11_UpravaStringu {
	private static String upravString(String s){
		String txt1 = s.replace('.','0');
		if(txt1.length() == 5) txt1=txt1+"00011";
		if(txt1.length() == 6) txt1=txt1+"0011";
		if(txt1.length() == 7) txt1=txt1+"011";
		if(txt1.length() == 8) txt1=txt1+"11";
		if(txt1.length() == 9) txt1=txt1+"1";
		return txt1;	}
	public static void main(String[] args) {
		System.out.println("Start Programu");
		String s = "1.2.3";	//	"17.3.2012"
		System.out.println(upravString(s));
		System.out.println("Konec Programu");

PS. jinak tento problém je otázkou 10 minut, tak nevím co na tom řešíš.

Nahlásit jako SPAM
IP: 217.112.161.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Složitější pole — založil Honza

Složitější pole — založil Honza

Složitější LEFT JOIN — založil David Plšek

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý