2016-04-20 6 views
0

Ich versuche, nur 3 Zahlen aus einer Zeichenfolge zu trennen und sie in der Zeichenfolge als Longs zu drucken. Ich brauche mein Programm, um den Leerraum als Trennzeichen zu verwenden, um anzuzeigen, dass ich am Ende dieser Nummer bin. Ich muss dann die nächste Zahl als neue Iteration der Schleife beginnen. Allerdings stürzt es ab, weil ich weiß, dass der Leerraum nicht konvertiert werden kann, denke ich.Probleme mit Leerraum beim Konvertieren von Zeichenfolge in lang

Was kann ich dagegen tun?

String cipherTxt = "45963254 45231582 896433482 "; 
for(int i=0; i<cipherTxt.length(); i++){ 
    String numberAsString = cipherTxt.substring(i,i+9); 
    long number = Long.parseLong(numberAsString); 
    System.out.println("The number is: " + number); 
} 
+0

Warum spalten Sie nicht nur die Zeichenfolge? 'String [] numbers = text.split (" ");' –

+1

Wenn Leerzeichen Sie stören, verwenden Sie die 'trim()' Methode von 'String'. – Berger

+0

Ich muss die Leerzeichen behalten. Ich bin nicht vertraut mit Split ... was genau macht das? – Farrell

Antwort

0

Warum können Sie nicht so etwas wie dies versuchen:

String cipherTxt = "45963254 45231582 896433482 "; 
String[] splitted = cipherTxt.split("\\s+"); 

for(String s : splitted){ 
    long number = Long.parseLong(s); 
    System.out.println("The number is: " + number); 
} 
+0

Können Sie mir Ihre for-Schleife erklären, wie ich es so Standard schreiben würde? und kannst du auch gespalten erklären? @ Dambros – Farrell

+0

Sie sollten 'trim()' vor dem Aufteilen oder so etwas wie ein doppeltes Leerzeichen zuerst einen ungültigen Eintrag auf dem Array verursachen. – dambros

0

Versuchen mit einfacher Scanner Klasse, als

String txt = "45963254 45231582 896433482 "; 
Scanner scanner = new Scanner(txt); 
while(scanner.hasNext()) 
    System.out.println(scanner.nextLong()); 

Oder vielleicht String.split() wenn Sie

String txt = "45963254 45231582 896433482 "; 
String[] tokens = txt.split(" "); 
for(String temp:tokens) 
    System.out.println(Long.parseLong(temp)); 
mögen
+0

Kann jemand diese For-Schleifen erklären? Ich verstehe die Notation überhaupt nicht. – Farrell

+0

Ich kann Sie nur [hier] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html) [und hier] (https://docs.oracle.com /javase/7/docs/api/java/lang/String.html) – soufrk

0

Do:

String cipherTxt = "45963254 45231582 896433482 "; 
String[] splitted = cipherTxt.split("\\s+"); 

for(String s : splitted){ 
    long number = Long.parseLong(s); 
    System.out.println(number); 
} 

dieser for-Schleife wird durch jeden String in dem Array iterieren gespaltet dann den Text in lange macht. man könnte es auch so schreiben:

for(int i = 0; i < splitted.length;i++){ 
    long number = Long.parseLong(splitted[i]); 
    System.out.println(number); 
} 

Hoffnung half i!

Edit: Natürlich, wenn Sie Fragen haben, fragen Sie!

0

Verwenden Sie Regex \d+, um eine Nummer zu finden. Durchlaufen Sie alle angegebenen Zahlen und speichern Sie sie unter List, damit Sie die gespeicherten Variablen anschließend wieder verwenden können.

String txt = "45963254 45231582 896433482 "; 

List<Long> list = new ArrayList<>(); 
Matcher m = Pattern.compile("\\d+").matcher(txt); 
while (m.find()) { 
    long l = Long.parseLong(m.group()); 
    list.add(l); 
    System.out.println(l); 
} 

Falls Sie das Array als die Ausgabe möchten, fügen Sie diese unter dem Zyklus:

Long[] numbers = list.toArray(new Long[list.size()]);