Eller dette gamle kode fra noget jeg kogte sammen for længe siden.
int xa3 = 0; String testDiff2 = lU.getText(); for (int i = 0; i < testDiff2.length() ; i++) { xa3 = testDiff2.charAt(i); System.out.println(xa3); if (xa3 < 48 || xa3 > 57)
{ JOptionPane.showMessageDialog(content, "Invalid caracter. Only use Integers", "Error", JOptionPane.ERROR_MESSAGE); return; } }
testDiff er den string man ønsker at teste på. Så løber løkken den igennem og ser om værdien ligger indenfor tallene 0 - 9 (så vidt jeg husker) QD::
Synes godt om
Slettet bruger
16. april 2002 - 09:28#8
Jeg gør hvad jeg kan for at følge med ;-)
Synes godt om
Slettet bruger
16. april 2002 - 09:43#9
Den sidste kan jeg ikke få til at virke. Og hvis jeg ellers er nået langt nok ser det ud som om at Disky's fungere således at hvis jeg har tastet nogle godkendte tegn ind kan jeg også indtaste ikke godkendte. Dvs hvis string = "a"; string "OK";
Prøv at kør dette quick and dirty kode. Det skulle give en fornemmelse for hvad der sker.
import java.io.*;
public class Indlaes { public static void main (String[] args) throws IOException {
System.out.println ("Indtast nogle chars og tryk enter"); InputStreamReader isr = new InputStreamReader (System.in); BufferedReader mitobject = new BufferedReader (isr);
int xa3 = 0; String testDiff2 = mitobject.readLine(); for (int i = 0; i < testDiff2.length() ; i++) { xa3 = testDiff2.charAt(i);
if (xa3 < 48 || xa3 > 57)
{ System.out.println ("Det indtastede " + (testDiff2.charAt(i)) + " er ikke mellem 0 og 9");
} }
} }
QD:: PS jeg må tilstå at Diskys kode eksempel er noget pænere :)
Hvis du kan fastlægge en syntaks for dit input er det værd at overveje at bruge regulære udtryk der er med i SDK1.4. import java.util.regex.*; String myInput = "aaabb"; /** den pattern vi vil genkende er et antal a'er (evt ingen) efterfulgt af et antal b'er (men mindst en). **/ Pattern myPattern = Pattern.compile("a*b+"); Matcher myMatcher = myPattern.matcher( myInput ); boolean ok = myMatcher.matches();
Der er også nogen der har lavet en klasse til netop det: http://www.javaregex.com/ Men det kræver dy lærer syntaksen i "Regular Expressions" og den er lidt strid :-))
regular expressions kan bruges, men i det tilfælde hvor man kun skal se om en bestemt karakter forekommer eller ej er det totalt overkill. Parsningen af en regexp er noget langsom i forhold til .indexOf().
Men skal du f.eks. se om en email adresse er gyldig osv, så er regexp smart.
jakoba: hvis du har en simpel syntaks er det du skal bruge ret begrænset, capturing groups f.eks. er unødvendige for simple udtryk. Et simpelt komma tal uden fortegn men med komma kan udtrykkes ved Pattern tal = Pattern.compile("[123456789]+[0123456789],[0123456789]"); og det er da ikke så vældig kompliceret.
Det var for at gøre det lettere gennemskueligt og du fangede det tydeligvis :) Jeg ville gerne have skrevet det som willi10 er ude efter helt præcist, men det mangler vi at få defineret. Hvis der er en "simpel" syntaks vil jeg mene at det er den foretrukne løsning. Hvis det er et spørgsmål om noget så simpelt som et tal er der i SDK1.4 klasser til håndtering af dette (JSpinner), men det er det næppe.
Der er en anden simpel mulighed. Man kan bruge en lidt kreativc bagvendt anvendelse af StringTokenizer til at lave en lille smuk løsning:
String delimit_alfa = "ABCDEFGHIJKLMNOPQRSTUWVXYZ"; StringTokenizer st1 = new StringTokenizer(strengDerSkalTestes, delimit_alfa, false); if (st1.countTokens() == 0) { System.out.println("Strengen indeholder kun Store bogstaver fra A til Z"); }
------ Dette kan selvfølgelig bruges med en vilkårlig samling tegn.
disky >> enig i at regexp er på grænsen til overkill her. carsten >> hvis det er så nemt hvorfor macher du så kun tal der har 2 cifre fulgt af een decimal :-)) Pattern tal = Pattern.compile("[1-9]+\d*(,/d*|)");
jakoba: oops, jeg lavede et testeksempel på laptop'en interaktivt og skrev det ind fremfor at kopiere det, og der røg en * til sidst. disky: du udnyttede vist heller ikke regexp ifølge din definition er 00000.2 et tal og det er ikke en pæn måde at skrive noget på :) Ang. evt overkill kommer det fuldstændig an definitionen af problemet.
carsten: Jeg sagde på intet tidspunkt jeg var regexp expert :-) Faktisk undgår jeg brugen af dem, for deres syntax er for kryptisk til at det giver et let overskueligt program.
jakoba -> Tak :-) (Hvis den opfylder behovet, er det jo en fin løsning lavet udelukkende ved standard java-api uden fancy reg.exp. ting eller java 1.4)
Synes godt om
Slettet bruger
16. april 2002 - 12:54#27
Det er muligt at det ikke er retfærdigt efter al den deltagelse. Men jkrag får de 30 point. Det er muligt at der blandt de mange løsninger er bedre. Men på mit niveau er jkrag's løsning fuldt ud tilstrækkelig (og så har jeg en idé om at jeg forstår hvad det er der sker ;-). Tak for hjælpen alle sammen.
willi10 -> Så vil jeg da sige mange tak for pointene på forhånd. :-) Men hvis der er nogle der føler sig alvorligt snydt, så deler jeg da også gerne. Hilsen Jan
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.