Felhantering vi inmatning av namn (Java)

Permalänk
Medlem

Felhantering vi inmatning av namn (Java)

Tjenare, jag försöker scanna in ett namn med en scanner, dela det i en array och sen kolla varje bokstav för sig om det är en bokstav eller typ ett bindesträck. Om inte så ska variabeln "fornamnValid" slå över till false. Men det verkar inte fungera, här är den biten av kod:

// Kollar om förnamnet innehåller några förbjudna tecken. boolean fornamnValid = true; char[] tillatnaTecken = {'å', 'ä', 'ö', 'Å', 'Ä', 'Ö', '-', '\''}; char[] fornamnArray = fornamn.toCharArray(); for (int i = 0; i < fornamnArray.length; i++) { if (!Character.isLetter(fornamnArray[i])){ fornamnValid = false; for (int j = 0; j < tillatnaTecken.length; j++) { if (fornamnArray[i] == tillatnaTecken[j]) { fornamnValid = true; break; } } } }

Vad har jag gjort fel? Tack på förhand!

Permalänk
Medlem

Vad är det som inte fungerar som det ska?
Ser inga problem med din kod.
Tänk dock på att å,ä,ö fortfarande är en letter

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Vad är det som inte fungerar som det ska?
Ser inga problem med din kod.
Tänk dock på att å,ä,ö fortfarande är en letter

Mja okej, men det är just å, ä, ö som är problemet, skriver jag in ett namn med någon utav dem så blir fornamnValid false
Medans ' och - funkar...

Jag kan absolut inte komma på vad som går snett.

Permalänk
Medlem

Vad sitter du i och utvecklar?
Eclipse?
Försök ändra till utf-8 ?

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Vad sitter du i och utvecklar?
Eclipse?
Försök ändra till utf-8 ?

Jag sitter i Netbeans, vet inte hur man ändrar encoding där i :/ Vet du hur man gör?

Permalänk
Medlem

Du skulle kunna lösa det där med regular expressions istället.

Permalänk
Medlem
Skrivet av segen:

Du skulle kunna lösa det där med regular expressions istället.

Jag är hyfsat ny på programmering, skulle du kunna utveckla eller visa vad du menar?

Permalänk

Håller med on REGEX. Skulle varit simplast som så men eftersom du är ny kanske det är överkurs. Däremot är din kod ganska komplett.

Här är iaf lite modifikationer du kan göra:

  • Behåll stäng istället för att göra till char array.
    Strängar har en charAt och en length funktion vilket är dem du använder arrayen till.

  • Lagra otillåtna tecken som arraylist och använd contains för att se ifall dem finns med.
    Enkelt att göra med al.addAll(Arrays.toList(new Character[]{'å','ä'.....}));
    Senare al.contains(fornamn.charAt(i));

  • Använd en int-variabel av strängens längd som för varje korrekt tecken ändrar variablen -1.
    Om variablen på slutet är 0 är hela stängen korrekt. Annars bröts loopen tidigt ty felaktigt tecken.

  • Verkar som du använder false som att strängen var korrekt?
    Känns lite underligt och är enkelt att förändra. Variabeln borde i mitt tycke börja som false och ifall strängen är korrekt ändras till true.

Kanske inte dem mest optimala lösningsmetoderna men antagligen dem lättaste.

Permalänk
Medlem
Skrivet av vmattsson:

Håller med on REGEX. Skulle varit simplast som så men eftersom du är ny kanske det är överkurs. Däremot är din kod ganska komplett.

Här är iaf lite modifikationer du kan göra:

  • Behåll stäng istället för att göra till char array.
    Strängar har en charAt och en length funktion vilket är dem du använder arrayen till.

  • Lagra otillåtna tecken som arraylist och använd contains för att se ifall dem finns med.
    Enkelt att göra med al.addAll(Arrays.toList(new Character[]{'å','ä'.....}));
    Senare al.contains(fornamn.charAt(i));

  • Använd en int-variabel av strängens längd som för varje korrekt tecken ändrar variablen -1.
    Om variablen på slutet är 0 är hela stängen korrekt. Annars bröts loopen tidigt ty felaktigt tecken.

  • Verkar som du använder false som att strängen var korrekt?
    Känns lite underligt och är enkelt att förändra. Variabeln borde i mitt tycke börja som false och ifall strängen är korrekt ändras till true.

Kanske inte dem mest optimala lösningsmetoderna men antagligen dem lättaste.

Ne fornamnValid är true från början och false om det inte är en bokstav eller är med i tillatnaTecken[]. Men det du föreslår är att jag ska vända på det hela men då måste jag ju uppge alla tecken som INTE får vara med istället för tecken som FÅR vara med, vilket bli mycket omständigare.

Men som ni säger borde det ju funka såhär egentligen.. Jag få kolla på det där med REGEX kanske.

Permalänk

Så namnet får innehålla bokstäver och alla tillåtna! Aha! Trodde du inte fick ha dem i arrayen. Antog att \ inte skulle finnas i ett namn.
Men min metod fungerar minst lika bra ändå! Bara att det ska vara contains på tillåtna tecken istället för otillåtna.

Permalänk
Medlem
Skrivet av vmattsson:

Så namnet får innehålla bokstäver och alla tillåtna! Aha! Trodde du inte fick ha dem i arrayen. Antog att \ inte skulle finnas i ett namn.
Men min metod fungerar minst lika bra ändå! Bara att det ska vara contains på tillåtna tecken istället för otillåtna.

Aa precis, men \ är ju bara där för att "slasha" in apostrofen(')! Okej, då ska jag testa det och läsa på lite om REGEX och se vad som blir bäst!

Tack för svaren!