Diskuze: Enumerátory
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
co zkusit regulární výraz, jako "\b[0-9A-F]+\b".
Ahoj,
Nevím jestli jsem pochopil přesně čeho chceš docílit, ale pokud chceš
zjistit jestli řádek obsahuje 0x a k tomu nějaké číslo a to
následně převést z hexadecimální soustavy do decimální, použil bych regex . Pokud ve tvém souboru, víš že všechny tvé
hexadecimální čísla budou začínat na 0x tak tvůj regex by
mohl vypadat nějak tak to:
0x([0-9A-Fa-f]+)
V Javě s tím pak můžeš pracovat nějak tak to:
String mujRadek = "0x1F";
String hexRegex = "0x([0-9A-Fa-f]+)";
Pattern r = Pattern.compile(hexRegex);
Matcher m = r.matcher(mujRadek);
if(m.find()) {
String hex = m.group().substring(2);
System.out.println("HEX: " + hex);
System.out.println("DEC: " + Integer.parseInt(hex, 16));
}
Nebo co třeba něco jako:
package itn.forum;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class Hex {
public static void main(String[] args) {
List<String> los = new ArrayList<>();
los.add(" 0x10 ");
los.add(" 0x1f 0x16");
los.add(" 0xzf ");
los.add(" 0x0cblabla ");
los.add(" 0x0c ");
Pattern r = Pattern.compile("\\b0x([0-9A-Fa-f]{2,2})\\b");
for(String s : los) {
if(r.matcher(s).find()) { System.out.println(s + " => souhlasi"); }
}
}
}
Děkuji všem za pomoc, ale stále to není přesně to co hledám. Zkusím upřesnit svůj dotaz. Mám zadání naprogramovat lexikální analyzátor, kteýr bude zpracovávat text a pomocí tokenů vypisovat na obrazovku text.
2 ) Musí rozeznávat identifikátory (jakékoliv slovo)
Pustil jsem se do programování a myslím, že mi funguje vše kromě bodů:
4), 6), 7)..
Matlám se s tím strašně dlouho a pořád nic, tak jsem doufal, že tady mě
to zachrání.
Main
public static void main(String[] args) {
try {
Analyzator analyzator = new Analyzator("testFile.txt");
while (!analyzator.jeVycerpano()) {
System.out.printf("%s %s\n", analyzator.currentToken(), analyzator.currentEnum());
analyzator.cteniZnaku();
}
} catch (Exception e) {
}
}
}
Analyzator
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;
/**
*
* @author Radek
*/
public final class Analyzator {
private final int MAXIMALNI_DELKA = 32;
private Token token;
private String enumy;
private StringBuilder stringBuilder = new StringBuilder();
private static final Set<Character> prazdnaMista = new HashSet<Character>();
private boolean vycerpano = false;
public Analyzator(String file) {
try (Stream<String> stream = Files.lines(Paths.get(file))) {
stream.forEach(stringBuilder::append);
} catch (IOException e) {
}
cteniZnaku();
}
static {
prazdnaMista.add((char) 8);
prazdnaMista.add((char) 9);
prazdnaMista.add((char) 11);
prazdnaMista.add((char) 12);
prazdnaMista.add((char) 32);
}
private void preskakujMezery() {
int mezery = 0;
while (prazdnaMista.contains(stringBuilder.charAt(mezery))) {
mezery++;
}
if (mezery > 0) {
stringBuilder.delete(1, mezery);
}
}
public void cteniZnaku() {
if (stringBuilder.length() == 0) {
vycerpano = true;
return;
}
preskakujMezery();
dalsiZnak();
}
private boolean dalsiZnak() {
for (Token t : Token.values()) {
int end = t.konecCteni(stringBuilder.toString());
if (end != 0) {
{
token = t;
enumy = stringBuilder.substring(0, end);
stringBuilder.delete(0, end);
return true;
}
}
}
return false;
}
public Token currentToken() {
return token;
}
public String currentEnum() {
return enumy;
}
public boolean jeVycerpano() {
return vycerpano;
}
}
Tokeny
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author Radek
*/
public enum Token {
KEYWORD_BEGIN("begin{0,33}"),
KEYWORD_END("end{0,33}"),
KEYWORD_FOR("for{0,33}"),
KEYWORD_IF("if{0,33}"),
KEYWORD_THEN("then{0,33}"),
KEYWORD_ELSE("else{0,33}"),
KEYWORD_WHILE("while{0,33}"),
KEYWORD_RETURN("return{0,33}"),
SEPARATOR_ROVNITKO("="),
SEPARATOR_CARKA(","),
SEPARATOR_DVOJTECKA(":"),
SEPARATOR_STREDNIK(";"),
NUMBER_DEC("\\d+"),
NUMBER_HEX("\\b0x[0-9A-F]"),
BLANK("\\s"),
IDENTIFIER("\\w{0,33}");
private final Pattern pattern;
Token(String regex) {
pattern = Pattern.compile("^" + regex);
}
int konecCteni(String string) {
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
return matcher.end();
}
return 0;
}
}
A ještě přiložím soubor se kterým pracuji:
testFile.txt
begin;
a,b=100;
c=0x10;
end;
Tak pokud by byl někdo ochotný mi poradit a pomoc to dotáhnout do konce, byl bych vděčný.
V druháku jsem to vyřešil tím, že jsem to načítal po znaku, nikoliv
řádku a zjišťoval co je za 0. 
Pokud máš napsat lexikální analyzátor, tak bych řekl že tě s
regulárními výrazy pošlou někam. Lexikální analyzátor využívá
zpravidla regulárních jazyků a tedy stavových automatů. I když lze každý
regulární výraz převést na stavový automat, jejich použití je v
lexikálním analyzátoru nevhodné, protože jsou příliš pomalé. Pouvažuj
nad tím, jestli to nechceš napsat pořádně 
Ale ve výsledku to vše funguje přesně podle zadání moc nerozumím jak bych to vlastně měl jinak přepsat. Koukám do toho každý den, ale bohužel jsem se moc neposunul..
Zobrazeno 8 zpráv z 8.