Avatar billede tri Nybegynder
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);




    }
Avatar billede disky Nybegynder
29. maj 2002 - 14:30 #1
brug en stringTokenizer som har tallene som tokens, så tæller du antal tal.

længden af strengen - antal tal = antal ikke tal.
Avatar billede tri Nybegynder
29. maj 2002 - 14:42 #2
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.
Avatar billede tri Nybegynder
29. maj 2002 - 14:44 #3
denne String:

String r = "48784.86764867.687867688";

udskriver

5 og 14
Avatar billede soreno Praktikant
29. maj 2002 - 14:55 #4
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));
    }
}
Avatar billede bearhugx Nybegynder
29. maj 2002 - 15:03 #5
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
Avatar billede bearhugx Nybegynder
29. maj 2002 - 15:04 #6
damn.. det her lagger ... :-)
Avatar billede tri Nybegynder
29. maj 2002 - 16:16 #7
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?
Avatar billede disky Nybegynder
29. maj 2002 - 16:19 #8
tri

ud fra hans metode og String api'en skulle du selv kunne gøre det

hint:
subString(start,stop);
Avatar billede soreno Praktikant
29. maj 2002 - 16:38 #9
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 :-)
Avatar billede tri Nybegynder
29. maj 2002 - 17:04 #10
hvor skal jeg indsætte mit array i metoden, for at få de 3 strings over i arrayet?
Avatar billede soreno Praktikant
29. maj 2002 - 17:08 #11
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... :-)
Avatar billede soreno Praktikant
29. maj 2002 - 17:18 #12
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));
Avatar billede tri Nybegynder
29. maj 2002 - 22:19 #13
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Banedanmark

Systemarkitekt

Netcompany A/S

Test Consultant

Lægemiddelstyrelsen

Løsningsarkitekt

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering