12 svar
180 visningar
programingg är nöjd med hjälpen
programingg 3
Postad: 12 jan 2023 13:46

Hur omvandlar jag en String med två heltal och en räkneoperator till int

Jag har en uppgift där jag har en metod som har en Sträng med två heltal och en räkneoperator som in-argument och metoden ska retunera svaret av uträkningen. (ex. "3 + 3") 

Hur kan jag få ut 6 som return? 

Jag har försökt använda Integer.parseInt men det går inte då det är en räkneoperator i strängen. 

Doff 61
Postad: 12 jan 2023 13:50

Läs char casta till integer. https://www.w3schools.com/java/java_type_casting.asp

Laguna Online 28549
Postad: 12 jan 2023 14:15

Det kanske finns en method för strängar som delar upp den i delar givet en separatorsträng eller reguljärt uttryck. Jag kan inte Java utantill.

Det borde finnas en variant av parseInt som är nöjd när talet är slut, och returnerar både heltalet och resten av strängen.

Vet du om det alltid är mellanslag runt operatorn? Kan talen vara negativa? Kan de ha fler än två siffror? Vilka operatorer kan förekomma?

programingg 3
Postad: 12 jan 2023 14:36

+, -, *, / kan förekomma. Talen kan ha fler än två siffror och kan vara negativa heltal, behöver inte vara mellanslag kring operatorn. Detta är från en grundkurs så kan inte tänka mig att svaret är allt för komplicerat.

Laguna Online 28549
Postad: 12 jan 2023 16:21

Du kan använda regexp (reguljära uttryck) för att parsa strängen. Jag kommer inte på något enklare om man inte vill skriva sin egen lilla parser, och det kanske man inte ska kalla enklare.

Fermatrix 7841 – Fd. Medlem
Postad: 12 jan 2023 16:35

Enklast är att använda JS engine: ScriptEngine

Alternativt kan du använda Classloader och reflect.

Laguna Online 28549
Postad: 12 jan 2023 16:38

JS låter som javascript, tycker jag.

Fermatrix 7841 – Fd. Medlem
Postad: 12 jan 2023 16:44 Redigerad: 12 jan 2023 16:46

Ja, JS engine skulle beteckna Javascript engine.

https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/#who

ScriptEngineManager och dylikt i Java bygger på JS. 

https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html

Det finns mycket man kan läsa om detta egentligen, speciellt i Java 17

Laguna Online 28549
Postad: 12 jan 2023 19:36

Se där, språken har till slut börjat ha något med varandra att göra. Jag lärde mig också vad Nashorn är, som det kommer udda utskrifter ifrån på jobbet.

Men enklast? Det känns som att knäcka en nöt genom att köra över den med stridsvagn.

Programmeraren 3387
Postad: 13 jan 2023 15:52

Enklast att förstå kan vara att först dela upp strängen i de tre delarna. Användbara funktioner:

int i = text.indexOf(str);
Ger indexet i strängen text där strängen str börjar.
T ex: 
"3 + 3".indexOf("+")
är 2 eftersom strängen "3 + 3" har 5 tecken där "+" har index 2.

String part = text.substring(from, count)
Ger den delen av text som finns från index from och count tecken framåt.
Den finns även i variant utan count:
String part = text.substring(from)
och den ger resten av strängen från index from

För att tvätta bort mellanslang i slutet och början av strängar finns metoden trim().
Vill du bli av med mellanslag inuti en sträng är det enklaste (det som är lättast att förstå) att loopa igenom strängen och kopiera alla tecken som inte är mellanslag till en ny sträng.

Det finns "smartare" sätt att göra en del av detta men de grundläggande metoderna i klassen String är bra att lära sig först.

Fermatrix 7841 – Fd. Medlem
Postad: 13 jan 2023 16:14 Redigerad: 13 jan 2023 16:15

Det beror iofs på vilken nivå denna frågan är ställd på.

Man kan använda din metod @programingg. 

Du kan för varje char mha en try catch kolla om det är möjligt att konvertera det till en int. Om det inte går, så är det antingen ett space om vi tillåter det, en räkneoperator. Om det är varken, så är det inte en giltig sträng och vi kan throwa en exception. Vi har också symmetri eftersom vi har: tal+tal.

Om det alltid är på format a + b, så vet du att de två nästliggande karaktärerna som inte går att göra om till en int måste vara " + ", eller " - ", osv. Det finns alltså bara fyra fall här, och resternade av strängen måste så klart gå att konvertera till en int.

Laguna Online 28549
Postad: 16 jan 2023 09:08

Hur går det?

programingg 3
Postad: 18 jan 2023 16:45

Jag löste uppgiften genom att ta charAt och konvertera karaktärerna på varje index (tog bort mellanrummen) till två separata integers och sedan returnera själva beräkningen från metoden! 

Svara Avbryt
Close