Datentypen Zahlen aus einem alphanummerischen Feld in ein Interger Feld portieren

didi04

Mitglied
Hallo zusammen,
ich habe ein 5 stelliges alphanummerisches Feld mit Inhalten von (B=Blank)
123BB oder
1-2 oder
BBBBB oder
0

und möchte - nein muß die nummerischen Inhalte in ein Integer Feld bringen. Ich dachte mir das ist nicht so schwer, aber ich breche mir grade die Finger daran. Gibt es da vllt. eine Funktion die ich nutzen kann, bzw. wo könnte ich solche Funktionen suchen.

So sollte die Umsetzung ausschauen :

Quelle Ziel
123BB 123
1-2 12
BBBBB
0 0
BB5BB 5

Vielen Dank vorab für einen Lösungsansatz.

vg
dietmar
 
Gehe dieses alphanumerische Feld Zeichen für Zeichen durch. Solltes es sich bei diesem Zeichen nicht um eine Zahl handeln mache nichts ... ist es eine Zahl hänge diese an einen (temporären/lokalen) String an. Am Ende diesen String einfach in einen Integer parsen.
Solltest du nur Blanks auf dem String stehen haben dann musst du halt per Default 0 als Integer haben 🙂

Hier sollte dir die Methode
Code:
char.isDigit()
helfen können 😉
 
Zuletzt bearbeitet:
Hallo Joose,
ja so ähnlich bin ich schon dran, mal schauen ob ich das hinbekomme 🙂
Kannst Du mir sagen was die Methode : char.isDigit() genau macht, bzw. wo ich das nachlesen kann ?

Danke schon einmal !
 
Ja shit, da hätte ich auch selber drauf kommen können 🙂 ! Habe jetzt da noch ein paar mehr Anhaltspunkte gefunden um das Problem (nur für mich 🙂) zu lösen !
 
So ich habe das nun mal so gemacht, weiss aber nicht genau ob es funktioniert !
Ich berichte weiter 🙂

Java:
       private int switchAlphaInNum(String zw_foreall, int stellen)
    {
        int ziel_hausnr;
        String ziel = " ";
        int i = 0;
        int x = 0;
        
        while (i < stellen) 
        {
            if (! Character.isDigit(zw_foreall.charAt(i)))
                i++;
            else 
            {
                ziel = ziel + zw_foreall.charAt(i);
                i++;
                x++;
            }
        }
        
        ziel_hausnr = (Integer.valueOf(ziel));
        
        return ziel_hausnr;

    }
 
ja ich dachte mir schon das es nicht so richtig gut ist. wie kann ich das schöner, besser oder performanter machen.
Ich bin ja blauäugig und dachte sowas gibt es schon als fertige funktion oder methoder 🙂

Aber danke Euch schon einmal sehr für die Hilfe !! Über Google findet man doch einiges !!!
 
nagut vielleicht doch etwas genauer was mich am code spontan stört.

was soll der zweite parameter stellen bringen? willst du wirklich auch nur teile überprüfen können? Dann müsste du zumindest auch prüfen das stellen <= foreall.lenght() ist.
wofür die variable x?
das i++ ausserhalb der if-abfrage stellen, dann kannst du dir auch das else sparen
 
so spontan ohne Garantie auf Richtigkeit

Java:
    private int switchAlphaInNum(String zw_foreall)
        {
            String ziel = "";
            
           for (int i=0; i<zw_foreall.length; i++)
            {
                if ( Character.isDigit(zw_foreall.charAt(i)))
                    ziel = ziel + zw_foreall.charAt(i);
                }
            }
   
            return Integer.valueOf(ziel);
     
        }
 
Java:
       private int switchAlphaInNum(String zw_foreall, int stellen)
    {
        int ziel_hausnr;
        String ziel = " ";
        int i = 0;
        int x = 0;
        
        while (i < stellen) 
        {
            if (! Character.isDigit(zw_foreall.charAt(i)))
                i++;
            else 
            {
                ziel = ziel + zw_foreall.charAt(i);
                i++;
                x++;
            }
        }
        
        ziel_hausnr = (Integer.valueOf(ziel));
        
        return ziel_hausnr;

    }

Was an diesem Code auffällt:

Verwende keine "_" für Variablennamen! Unschön und probiere mal mit Doppelklick den ganzen Namen zu markieren 😉
Für solche Fälle verwendet man die lowerCamelCase Schreibweise!

Hier mal ein ungetesteter Codevorschlag 😉
Java:
private int switchAlphaInNum(String zwForall) {
   String tmp = "";
   for(Char c : zwForall.toCharArray()) {
      if(Character.isDigit(c)) {
         tmp += c;
      }
   }
   if(tmp.trim().length()<=0) {
      return -1;
   }
   return Integer.valueOf(tmp);
}
 
Zuletzt bearbeitet:
Danke Euch beiden,
bei mir lag noch einiges im ARGEN, das hab ich beim testen schon schnell gemerkt !
Das mit der lowerCamelCase Schreibweise, da muss ich mich erst daran gewöhnen, aber es gefällt mir immer mehr und ist tatsächlich übersichtlicher !!

Es funktioniert jetzt auf jeden Fall - aber Joose kannst Du mir 2 Sachen vielleicht noch erklären :

1.) Was passiert da genau :

Java:
for  (Char c : zwForall.toCharArray())
       {      if(Character.isDigit(c)) 
         {         tmp += c;

         }
       }

2.) Was macht die Methode :
Java:
    if(tmp.trim().length()<=0)

Würde beides gerne verwenden, aber kapieren muss ich es halt 🙂

Vielleicht noch eine 3. Frage, wenn ich den Java Code kopiere zB. in NotePad++ dann ist der leider immer unformatiert und ich muß alle Zeilen umbrechen, gibts da eine Möglichkeit oder Option um das zu verhindern, bzw. um die Formatierung beizubehalten.

VIELEN DANK für Eure Hilfe !
 
Moin

Ich weiß für Anfänger ein Graus, aber gewöhne dich an die Java API 😉

Java:
    for  (Char c : zwForall.toCharArray())
           {      if(Character.isDigit(c))
             {         tmp += c;
     
             }
           }

Das ist die so genannte foreach-Schleife, neu bei Java seit Vesion 5, wenn ich mich richtig erinnere.
Ganz simpel, um durch Listen zu iterieren. Bei jedem Schleifendurchlauf wird das nächste Element in c geladen.
BTW:
Code:
 tmp += c;
ist das gleiche wie
Code:
tmp = tmp + c;
, falls das noch unklar war 😉

[Java] if(tmp.trim().length()<=0)[/Java]
Ein Fall für die API :bae:
Paket java.lang, Klasse String und die Methoden trim() und length()

Beim Javastart hatte ich BlueJ verwendet, ist ganz gut. AFAIK gibt es dazu auch ein Einsteigerbuch. Java lernen mit BlueJ, oder so ähnlich. Gerade für Einsteiger ist eine IDE wie Eclipse am Anfang Overkill. Damit kann man mit Java arbeiten, aber zum lernen der Sprache IMHO eher ungeeignet.
Ging mir bei C ganz ähnlich ... da reicht vim, gcc und gdb zum Sprachelernen.
 

Zurück
Oben