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.
Läs char casta till integer. https://www.w3schools.com/java/java_type_casting.asp
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?
+, -, *, / 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.
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.
Enklast är att använda JS engine: ScriptEngine
Alternativt kan du använda Classloader och reflect.
JS låter som javascript, tycker jag.
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
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.
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.
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.
Hur går det?
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!