Java-nybörjare, problem med charAt(), å ä ö

Permalänk

Java-nybörjare, problem med charAt(), å ä ö

Tjo!

Jag har ganska nyligen börjat med en programmeringskurs på högskolan och fått en liten övningsuppgift i skolan för att latja runt lite med Java och lära mig grunderna. Jag har dock stött på ett problem vid användandet av

String.charAt();

tillsammans med å ä ö.

När jag kör programmet i Eclipse 4.2.1 (Mac OSX 10.8.2), med Java 1.7, så helt enkelt vägrar programmet räkna några av å ä ö som vokaler, utan räknar hellre dem två gånger vid användning av

String.length();

Uppgift i skrift:
Räkna vokaler

Skriv ett litet Java-program som ber användaren att mata in en textsträng och som sedan skriver ut hur många tecken
som fanns i textsträngen samt hur många vokaler som fanns. Räkna här med svenska bokstäver,
alltså vokalerna a, e, i, o, u, y, å, ä och ö.
Givetvis skall det inte spela någon roll om man skriver små eller STORA bokstäver, alltså är både a och A en vokal.

När programmet körs kan det t.ex. se ut så här:

Skriv en rad: Hej hopp, detta är min textrad - RÄKSMÖRGÅS!!!
Raden innehöll 46 teckan varav 11 var vokaler

Kod jag skrivit hittills:

import java.util.Scanner; public class CountingVowels { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Skriv en rad: "); String userText = sc.nextLine(); int sumVowels = 0; int vowelIndex; for (vowelIndex = 0; vowelIndex < userText.length(); vowelIndex++) { switch (userText.charAt(vowelIndex)){ case 'a': case 'A': case 'o': case 'O': case 'u': case 'U': case 'å': case 'Å': case 'i': case 'I': case 'e': case 'E': case 'y': case 'Y': case 'ä': case 'Ä': case 'ö': case 'Ö': sumVowels++; break; default: break; } } System.out.println("Raden innehöll " + userText.length() + " tecken varav " + sumVowels +" var vokaler"); } }

Vid körning:

Skriv en rad: ååååå Raden innehöll 10 tecken varav 0 var vokaler

Fungerar utmärkt vid alla andra tecken:

Skriv en rad: Tycker du som jag? Raden innehöll 18 tecken varav 5 var vokaler

Jag blir tokig! Hur kan jag lösa detta? En av mina studiekamrater har samma problem, och läraren hade inget bra svar.

Permalänk

Vid närmare testning fungerar det som det ska genom terminalen. Varför fungerar det då inte när jag kör det i eclipse?

Permalänk
Medlem

Har haft problem med svenska tecken vid en blandad utvecklingsmiljö (Windows, OSX) där åäö blivit skumma dubbeltecken så jag antar att det skulle kunna vara något liknande här. Lösningen är att gå in i inställningarna för eclipse eller projektet och sätta att du ska använda teckenkodning UTF8 istället för systemstandard.

Visa signatur

Sugen på en tråkig ordvits?
Fråga mig!

Permalänk
Medlem

Gissar på att det har att göra med vilken code page som är aktiv i terminalen.

Visa signatur

Assembly är ett högnivåspråk.

Permalänk
Medlem

Ett annat tips kan ju vara att använda sig av Asci värdet istället.

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

Ett smidigt sätt att se om någonting är en vokal vore ju att lägga alla svenska vokaler i en String och för varje char kolla om den ligger i den. Alternativt som ovanstående sa, kör if-satser med asciivärden.

Permalänk
Hedersmedlem

Tog bort ett inlägg. Hälsa kan man göra via PM.