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


Zobrazeno 17 zpráv z 17.
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.


public String formatStr(String format, Object... args){
char[] znaky = format.toCharArray();
int pozice = 0;
for (int i = 0; i < znaky.length; i++){
if (znaky[i] == '%'){
znaky[i] = ' ';
znaky[i +1] = (Char)args[pozice];
pozice++;
}
}
return "a";
}
takto nějak bych to chtěl řešit, ale nějak jsem se na tom zasekl.
Můžeš použít ArrayList<Character> a pak to převést zpátky do Stringu
tak nakonec jsem to udělal jinak..
public static String formatStr(String format, Object... args){
String vrat = "";
for (int i = 0; i < format.length(); i++) {
char znak = format.charAt(i);
if (znak == '%') {
i++;
int pozice = Character.getNumericValue(format.charAt(i));
vrat += args[pozice].toString();
} else {
vrat += znak;
}
}
return vrat;
}
Vyřešil bych to takhle:
public String formatStr(String format, Object... args){
String output = "";
int index = 0;
char c;
for (int i = 0; i < format.length(); i++){
c = format.charAt(i);
if ( c == '%'){
output += "" + args[index];
index++;
i++;
}else{
output += format.charAt(i);
}
}
return output;
}
Nikdy jsem s tím nepracoval, takže nevím jestli to používám správně,
ale funguje to
. Jinak
řekla ti ta osoba, která ti to doporučila důvod?
public String formatStr(String format, Object... args){
int index = 0;
char c;
StringBuilder sb = new StringBuilder(format.length());
for (int i = 0; i < format.length(); i++){
c = format.charAt(i);
if ( c == '%'){
sb.append(args[index]);
index++;
i++;
}else{
sb.append(c);
}
}
return sb.toString();
}
V Javě jsou řetězce read-only, takže když spojíš 2 do sebe, tak se musí vždy vytvořit nová instance. To může být někdy zbržďující, hlavně když připojuješ třeba po znaku. Proto existují tyto buildery, které instanci stringu vyrobí až na konci.
Díky
...
No, napsal mi nejdříve toto: Pro vytvareni retezcu v metode formatStr byste
mel pouzit StringBuilder. A následně, že si máme zkusit vytvořit metodu na
opakování znaků, která vytvoří řetězec.. Nejdříve pomocí string a +=
char a pak pomocí toho stringbuilder. Změřit rychlost obou metod a vzít si
morální ponaučení 
tady mám ty metody na otestování rychlosti
a docela velký rozdíl to
hází, při používání StringBuilderu
public class Main {
public static String repeatChar1(char c, int n){
long x = System.currentTimeMillis();
String s = "";
for (int i = 0; i < n; i++){
s += c;
}
x = (x - System.currentTimeMillis()) * -1;
System.out.println("Cas v ms: " + x);
return s;
}
public static String repeatChar2(char c, int n){
long x = System.currentTimeMillis();
StringBuilder s = new StringBuilder(n);
for (int i = 0; i < n; i++){
s.append(c);
}
x = (x - System.currentTimeMillis()) * -1;
System.out.println("Cas v ms: " + x);
return s.toString();
}
public static void main(String[] args) {
System.out.println("Vytvoreni strignu");
repeatChar1('a', 100000);
repeatChar2('a', 100000);
}
Abych zbytečně nezakládal nové téma
Dostal jsem úkol naprogramovat
metodu Filter(z jazyka scheme, popř lisp) a aplikovat ji s anonymní třídou,
lambdou a vnořenou třídou .. Jestli jsem to správně pochopil tak anonymní
třídu a lambdu mám, ale nevím si rady s tou vnořenou třídou viz kod
System.out.println("Filter pomocí anonymní třídy:");
List<Object> lst2 = new ArrayList<Object>();
lst2.add(1);
lst2.add(2);
lst2.add(3);
lst2.add(4);
lst2.add(5);
lst2.add(6);
lst2.add(7);
lst2.add(8);
lst2.add(9);
lst2.add(10);
List<Object> lst3 =
FunkceFilter.filter(lst2, new Condition(){
//anon. třída
public boolean condition(Object o){
return (Integer) o % 2 == 0;
}
});
for(Object o : lst3){
System.out.println(o);
}
System.out.println("Filter pomocí lambdy:");
//lambda
lst3 = FunkceFilter.filter(lst2, (a) -> ((int) a % 2 == 0));
for(Object o : lst3){
System.out.println(o);
}
System.out.println("Filter pomocí vnitřní třídy:");
lst3 = FunkceFilter.filter(lst2, c); // zde by se mělo nahradit c vnitřní třídou
Nevíte někdo, jak by to mělo vypadat ?
Možná nějak takto:
// ... uvnitř nějaké třídy
class MyInnerCondition extends Condition {
public boolean condition(Object o) {
return (int) o % 2 == 0;
}
}
void test() {
FunkceFilter.filter(list, new MyInnerCondition())
}
Zobrazeno 17 zpráv z 17.