justineMedlem sedan maj 200167 inlägg jag vill göra om en sträng till integer och vill då kolla först så det bara finns siffror i strängen.
typ:
if ((myString.charAt(1)>'0')&&(myString.charAt<'10')){
return true;
}
fast det funkar inte riktigt ju. har jag tänkt helt fel?
hur kollar jag efter så att det inte finns blanksteg?
------------------
/ justine
Det enklaste är att helt enkelt skicka strängen som argument till Integers konstruktor och sedan fånga ett eventuellt NumberFormatException. Kastas detta undantag så är det en ej godkänd sträng, annars är allt frid och fröjd:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">String myString = "1322";
Integer i;
try {
i = new Integer(myString);
} catch (NumberFormatException e) {
System.out.println(myString+ "är inte ett godkänt heltal");
}
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
LimeMedlem sedan sep. 2001961 inlägg Vad är det för fel på Character.isDigit()?
http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.html#isDigit(char)
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
Vad är det för fel på Character.isDigit()?
Vem har sagt att det är något fel på den?
I det här fallet skulle det dock vara intressant att få höra på vilket sätt isDigit() är bättre lämpat, skall man ovandla en textsträng till en Integer så är det ju väldigt simpelt att just göra det och sedan fånga eventuella undantag istället för att hålla på och spendera klockcykler åt att kolla varenda tecken i strängen och se om det är en siffra eller inte.
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
LimeMedlem sedan sep. 2001961 inlägg Faktum är att det tar mindre tid att bara kolla om det är en siffra i en sträng än att omvandla den.
Konstruktorn Integer(String) anropar Integer.parseInt(String) som kollar efter minustecken först och sedan går till sista tecknet i strängen och kollar om det är en digit . Om det är det så adderar den digit (genom bitoperatorer) till det resultat som redan finns.
Om man bara är intresserad av att veta om det är en till integer konverterbar sträng så tar det mindre klockcykler att bara kolla att alla ingående tecken är en siffra än att även göra matematiken.
Nu har jag svårt att se varför man INTE skulle vilja ha själva värdet på integern om man nu gör sig besväret att kolla om det är en integer...
Var tvungen att kolla asemblerkoden på denna operation och på en Solaris-maskin så skiljer det 3 instruktioner per siffra mellan att bara kolla om det är en siffra och att kolla och addera... och det är försummbart.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
spangoMedlem sedan juni 20008 205 inlägg En annan variant...
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
import java.util.regex.Pattern;
...
if(Pattern.matches("^{digit}+$", myString)){
// bara siffror
} else {
// inte bara siffror
}
------------------
You can be a coward for a few minutes, or dead forever. /Rincewind
LimeMedlem sedan sep. 2001961 inlägg Jag måste erkänna att klassen för reguljära uttryck hade jag missat. Oj vad livet blev lättare. Tack S.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
PeWMedlem sedan juni 200010 432 inlägg Funkar inte den bara från JDK1.4?
------------------
Ancilla, face mea laganum!
PeWMedlem sedan juni 200010 432 inlägg ------------------
Ancilla, face mea laganum!
Faktum är att det tar mindre tid att bara kolla om det är en siffra i en sträng än att omvandla den.
Ehh, men när du väl kollat och godkänt strängen så kommer den att kontrolleras igen vid instansieringen av Integerobjektet.
Men visst, alla gör vi väl olika. Jag föredrar dock att helt enkelt fånga undantag men visst kan man sitta och knåpa ihop specialfunktioner om det roar en..
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
LimeMedlem sedan sep. 2001961 inlägg Helt korrekt sgtP. Men nu var diskussionen om kollen tog längre tid än konverteringen.
För övrigt är det resursslöseri att skapa ett nytt Integerobjekt när man förmodligen kommer att använda det atomära int för det mesta... Integer.parseInt(String) är nog bättre då...
Håller fullständigt med om, och det tror jag att jag redan har sagt, att om man skall använda sträng/integern.
Det är aldrig fel att kika på källkoden till Javas core-klasser... Dom gör mycket roligt och snyggt där.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk