29. maj 2002 - 14:23
Der er
11 kommentarer og 2 løsninger
Tjek for IKKE tal i en string
Jeg har en metode som gennemløber en string, og tæller en værdi en op, hver gang der mødes et punktum. Men jeg ønsker at værdien skal tællers en op, hver gang der mødes et tegn som IKKE er et tal. Hvordan gør man det? public void count () { String r = "48784.86764867.68786768.876768"; int antal = 0; final char s1 = '.'; char[] s = r.toCharArray(); for (int i = 0; i < r.length(); i++) { char x = s[i]; if ((x == s1)) antal += 1; } System.out.println(antal); }
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
brug en stringTokenizer som har tallene som tokens, så tæller du antal tal. længden af strengen - antal tal = antal ikke tal.
jeg formuleret mig nok lidt forkert. Jeg skal også bruge positionerne, på hvornår jeg møder IKKE TAL. Lige som her: public void count () { String r = "48784.86764867.68786768.876768"; int index1 = 0; int index2 = 0; final char s1 = '.'; char[] s = r.toCharArray(); for (int i = 0; i < r.length(); i++) { char x = s[i]; if (index1 == 0) { if (x == s1) index1 = i; } else { if ((x == s1)) index2 = i; } } System.out.println(index1); System.out.println(index2); } Her får jeg jo de 2 positioner, på hvornår jeg møder de 2 punktumer.
denne String: String r = "48784.86764867.687867688"; udskriver 5 og 14
String s = "48784.86764867.68786768.876768"; for(int i=0;i<s.length();i++) { if(!Character.isDigit(s.charAt(i))) { System.out.println("På plads: " + i + " står der: " + s.charAt(i)); } }
Prøv denne stump kode :-) import java.util.*; public class X { public static void main(String args[]) { new X(); } X() { String testString = "192.192.192.192"; int[] is = getIndexesOfNonNumerals(testString); for( int x=0; x<is.length; ++x ) System.out.println(" found non-numeral at possion "+is[x]); } private int[] getIndexesOfNonNumerals( String s ) { System.out.println(" Testing for non-numerals"); Vector ints = new Vector(); for( int idx=0; idx<s.length(); ++idx) { char c = s.charAt(idx); System.out.println(" Testing char "+c); if( (c<'0') || (c>'9') ) { System.out.println(" found "+c); ints.add( new Integer(idx) ); } } int[] returning = new int[ints.size()]; for( int x=0; x<ints.size(); ++x) returning[x] = ((Integer)ints.elementAt(x)).intValue(); return returning; } } /Søren Munk Skrøder
damn.. det her lagger ... :-)
soreno: dit kode der er sku i orden. Med jeg kunne godt tænke mig at udbygge metoden lidt: Jeg har en string, hvor jeg ønsker de 3 første talrækker gemt i 3 Strings. f.eks. String test = "22. u 2. iw 01" bliver til: String a = "22"; String b = "2" String c = "01" Og denne string "1. i 2. t 02" bliver til: String a = "1"; String b = "2" String c = "02" Er det svært?
tri ud fra hans metode og String api'en skulle du selv kunne gøre det hint: subString(start,stop);
String s = "1. i 2. t 02"; String temp = ""; for(int i=0;i<s.length();i++) { if(!Character.isDigit(s.charAt(i))) { if(temp.length()>0) System.out.println(temp); temp = ""; } else { temp = temp + s.charAt(i); } } System.out.println(temp); er en anden måde at gøre det på, måske ikke den smarteste - men det virker :-)
hvor skal jeg indsætte mit array i metoden, for at få de 3 strings over i arrayet?
lav lidt trylleri der hvor der er en System.out.println(temp) istedet for at skrive dem ud, kunne du jo eks. indsætte dem i dit array... :-)
kunne se sådan ud: String s = "1. i 2. t 02"; Vector vect = new Vector(); String temp = ""; for(int i=0;i<s.length();i++) { if(!Character.isDigit(s.charAt(i))) { if(temp.length()>0) vect.add(temp); temp = ""; } else { temp = temp + s.charAt(i); } } if(temp.length()>0) //det var ikke med før, men bør være der, for at teste om det er relevant at smide temp over i vect. vect.add(temp); for(int i=0;i<vect.size();i++) System.out.println(vect.elementAt(i));
Kurser inden for grundlæggende programmering