Integer aus String

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Morgen,

die Umwandlung von einen hexString in einen Integer, kann man die optimieren.
momentan habe ich folgenden Code:

Code:
Integer.valueOf(hexString1 + hexString2, 16);


diese Zeile möchte ich optimieren, lässt sich da noch was machen?
schönen Tag noch,
 
G

Guest

Gast
Gast hat gesagt.:
Code:
Integer.valueOf(hexString1 + hexString2, 16);
diese Zeile möchte ich optimieren, lässt sich da noch was machen?
Zunächst einmal benötigst Du wahrscheinlich gar keinen Integer (Referenztyp), sondern einen int (primitiver Typ). Ersetze valueOf durch parseInt:
Code:
public static int parse1(String hexString1, String hexString2)
{
    return Integer.parseInt(hexString1 + hexString2, 16);
}

Falls die beiden Strings immer jeweils vier Zeichen lang sind, dann kannst Du Dir die Stringkonkatenation sparen und einfach beide Strings parsen und dann das Ergebnis passed zusammenbauen:

Code:
public static int parse2(String hexString1, String hexString2)
{
    return Integer.parseInt(hexString1, 16) << 16
         | Integer.parseInt(hexString2, 16);
}

Du kannst auch manuell parsen (wie gesagt unter der Voraussetzung, dass beide Strings immer genau vier Zeichen lang sind):
Code:
public static int parse3(String hexString1, String hexString2)
{
    return Character.digit(hexString1.charAt(0), 16) << 28
         | Character.digit(hexString1.charAt(1), 16) << 24
         | Character.digit(hexString1.charAt(2), 16) << 20
         | Character.digit(hexString1.charAt(3), 16) << 16
         | Character.digit(hexString2.charAt(0), 16) << 12
         | Character.digit(hexString2.charAt(1), 16) << 8
         | Character.digit(hexString2.charAt(2), 16) << 4
         | Character.digit(hexString2.charAt(3), 16);
}

Dazu noch ein kleines Testprogramm, um zu schauen, dass wir keinen Blödsinn programmiert haben:
Code:
public static void test(String hexString1, String hexString2)
{
	System.out.println(parse1(hexString1, hexString2));
	System.out.println(parse2(hexString1, hexString2));
	System.out.println(parse3(hexString1, hexString2));
}

public static void main(String[] args)
{
	test("1337", "BABE");
}

Fred
 

Marco13

Top Contributor
FALLS das wirklich der Bottleneck deiner Anwendung ist, kannst du das optimieren. Wie seht, hängt immer davon ab, wie genau du die Eingabedaten kennst. FALLS es immer ein gültiger Hex-String (mit Großbuchstaben) ist, kannst du sowas machen wie
Code:
class HexToIntTest
{
    static String hexStrings[] = new String[]
    {
        "12AB34CD",
        "BADBAD",
        "123456",
        "FAB123",
    };

    public static void main(String args[])
    {
        for (int n=1000; n<=100000000; n*=10)
        {
            test1(n);
            test2(n);
        }
    }


    public static void test1(int n)
    {
        long before = System.nanoTime();
        int sum = 0;
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<hexStrings.length; j++)
            {
                sum += Integer.valueOf(hexStrings[j], 16);
            }
        }
        long after = System.nanoTime();
        System.out.println(sum+" test1 "+(after-before)/1000000);
    }

    public static void test2(int n)
    {
        long before = System.nanoTime();
        int sum = 0;
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<hexStrings.length; j++)
            {
                sum += hexToInt(hexStrings[j]);
            }
        }
        long after = System.nanoTime();
        System.out.println(sum+" test2 "+(after-before)/1000000);
    }

    private static int hexToInt(String s)
    {
        int n = s.length()-1;
        int result = 0;
        int shift = 0;
        for (int i=n; i>=0; i--)
        {
            char c = s.charAt(i);
            int f = (c >= 'A'? c-'A'+10:c-'0');
            result |= (f << shift);
            shift+=4;
        }
        return result;
    }
}
(schon wieder einer dieser unrepräsentativen Microbenchmarks, die suggerieren, dass die "häßliche" Lösung 3x so schnell ist wie die "normale")

Aber ob sich das lohnt, ist fraglich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
V Eingegeben String Splitten und in Integer umwandeln Allgemeine Java-Themen 2
B Transferable in String/Integer umwandeln Allgemeine Java-Themen 11
O Nach parse von String zu Integer verliere ich Programmablauf! Allgemeine Java-Themen 10
S String[] in Integer umwandeln Allgemeine Java-Themen 16
R Anführungszeichen Integer.valueOf(String).intValue(); Allgemeine Java-Themen 6
H Integer/String Allgemeine Java-Themen 9
MQue Integer in String Allgemeine Java-Themen 2
G Datumswert String in Integer umwandeln Allgemeine Java-Themen 2
G ArrayList<String> to ArrayList<Integer Allgemeine Java-Themen 2
M String nach Integer und führende Nullen Allgemeine Java-Themen 6
M Datenstrukrue, List<Map<Integer, Map<String, . Allgemeine Java-Themen 2
M Integer in String umwandeln Allgemeine Java-Themen 7
N Prüfen ob ein String in einen Integer umgewandelt werden kan Allgemeine Java-Themen 4
P Class zu Integer, String, Double etc. Allgemeine Java-Themen 11
H Array nimmt keinen in Integer konvertierten String auf! Allgemeine Java-Themen 26
V Typumwandlung Integer, Float etc in String Allgemeine Java-Themen 4
C String in Integer wandeln Allgemeine Java-Themen 17
MCDragon IDEA IntelliJ Integer Number Too Long - Help Allgemeine Java-Themen 1
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
O JSON in Integer parsen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Mit Lombok Integer Range prüfen Allgemeine Java-Themen 6
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
R Datentypen Korrekte integer in Hex ASCII Konvertierung und serialisierung Allgemeine Java-Themen 1
B List<Integer> ist List<Double> ? Allgemeine Java-Themen 6
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
X Integer.numberOfTrailingZeros() Allgemeine Java-Themen 1
K Array, Int expected, Integer found Allgemeine Java-Themen 5
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
K Input/Output Integer.parseInt() an Textdateien anwenden Allgemeine Java-Themen 2
D Beste Collection für Integer Allgemeine Java-Themen 4
Zettelkasten Double --> Integer Allgemeine Java-Themen 4
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
O Input/Output Textfeld: nur Integer annehmen Allgemeine Java-Themen 9
T int <-> integer, double <-> Double... Allgemeine Java-Themen 2
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
GianaSisters Klassen ArrayList Index Integer int Allgemeine Java-Themen 5
G Datentypen JGoodies Binding und JSpinner mit Integer Allgemeine Java-Themen 2
L Problem mit Integer.parseInt Allgemeine Java-Themen 17
C Benchmark: ArrayList<Integer>, Integer[], int[] Allgemeine Java-Themen 10
Rudolf Aus Collection<Integer> eine Zahl machen Allgemeine Java-Themen 2
Z Cast von Long zu Integer funktionert nicht Allgemeine Java-Themen 3
E Zweidimensionales Array Integer[10 000][10 000] -> out of memory? Allgemeine Java-Themen 4
T Integer aus InputStream lesen Allgemeine Java-Themen 3
K Heap-Volllaufen bei ArrayList<Integer> Allgemeine Java-Themen 9
C Character in Integer Allgemeine Java-Themen 12
D Double to Integer - ist das möglich? Allgemeine Java-Themen 3
MQue byte[] Array to Integer Allgemeine Java-Themen 4
J Mit mehrdimensionalen Integer-Arrays arbeiten Allgemeine Java-Themen 17
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
G erzeugen von "ArrayList<Integer>[][]" Allgemeine Java-Themen 7
M Integer.parseInt Allgemeine Java-Themen 4
G enum Integer zuweisen Allgemeine Java-Themen 14
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
B 16Bit Integer aus ByteArray im Little Endian Format Allgemeine Java-Themen 17
O java.lang.NumberFormatException für normalen integer Allgemeine Java-Themen 4
T Integer hhmm addieren Allgemeine Java-Themen 11
P Integer und Bit-operationen Allgemeine Java-Themen 21
M Java 1.4 und Integer Allgemeine Java-Themen 3
S Integer zu int konvertieren - JUnit Allgemeine Java-Themen 12
J Integer Array Wert vorhanden? Allgemeine Java-Themen 6
B Plaintext Integer einlesen und verarbeiten Allgemeine Java-Themen 3
R cast Integer[] zu int[] Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
H Integer#valueOf(int) bei 1.4 Allgemeine Java-Themen 7
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R Integer will sich nicht lesen lassen! Allgemeine Java-Themen 9
G Umwandlung Byte in Integer Allgemeine Java-Themen 12
M reflection Integer != int ? Allgemeine Java-Themen 3
P int != Integer Allgemeine Java-Themen 3
S Integer-Zahlen in Excel-Sheet schreiben Allgemeine Java-Themen 10
T JNI: jcharArray: warning: cast to pointer from integer of. Allgemeine Java-Themen 5
R Float richtig in Integer ? Allgemeine Java-Themen 4
T Integer und TextFelder Allgemeine Java-Themen 3
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
M Index eines Arrays ermitteln und als Integer ausgeben Allgemeine Java-Themen 7
B Integer zählen bzw. speichern Allgemeine Java-Themen 3
H Prüfen, ob es sich um ein Integer handelt Allgemeine Java-Themen 4
J Integer.parseInt funktioniert nicht immer Allgemeine Java-Themen 3
G Nur Integer Werte in JTextField Allgemeine Java-Themen 4
C EML Email Text in String wandeln Allgemeine Java-Themen 11
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18

Ähnliche Java Themen


Oben