2016-10-18 4 views
1

Ich schreibe ein Stück eines Codes, wo ich versuche, die Benutzereingabe in 3 verschiedene Arrays aufzuteilen, indem Sie die Leerzeichen zwischen den Werten des Benutzers verwenden trat ein. Doch jedes Mal wenn ich den Code ausführen bekomme ich den Fehler:Versuchen, eine Zeichenfolge mit Leerzeichen aufzuteilen

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
      at Substring.main(Substring.java:18) 
    Java Result: 1 

habe ich versucht, ein anderes Trennzeichen zu verwenden, wenn die Eingabe von Text, und es hat geklappt hat, z.B. benutze a/spalte genau die gleiche Eingabe normal, und habe getan, was ich bisher tun wollte. Jede Hilfe wäre willkommen! Hier ist mein Code benötigt, wenn

import java.util.Scanner; 

    public class Substring{ 
    public static void main(String[]args){ 
    Scanner user_input = new Scanner(System.in); 

    String fullname = ""; //declaring a variable so the user can enter their full name 
    String[] NameSplit = new String[2]; 
    String FirstName; 
    String MiddleName; 
    String LastName; 

    System.out.println("Enter your full name (First Middle Last): "); 
    fullname = user_input.next(); //saving the user's name in the string fullname 

    NameSplit = fullname.split(" ");//We are splitting up the value of fullname every time there is a space between words 
    FirstName = NameSplit[0]; //Putting the values that are in the array into seperate string values, so they are easier to handle 
    MiddleName = NameSplit[1]; 
    LastName = NameSplit[2]; 

    System.out.println(fullname); //outputting the user's orginal input 
    System.out.println(LastName+ ", "+ FirstName +" "+ MiddleName);//outputting the last name first, then the first name, then the middle name 
    new StringBuilder(FirstName).reverse().toString(); 
    System.out.println(FirstName); 


} 

}

+0

Warum bist du macht fullname.split ("\\") statt nur fullname.split ("")? Ich bin mir ziemlich sicher, dass ich das schon einmal gemacht habe und es hat funktioniert. – Addi

+1

Ja, aber Sie haben uns nicht gesagt, was Sie getan haben, so .. –

+0

Das sollte nicht da sein, meine schlechte –

Antwort

0

Sie haben Fehler gemacht an folgenden Orten verwenden:

fullname = user_input.next();

Es nextLine() statt sein sollte nur next() da Sie die komplette lesen wollen Linie vom Scanner.

String[] NameSplit = new String[2];

Es besteht keine Notwendigkeit für diesen Schritt, wie Sie NameSplit = user_input.split(...) später tun, aber es sollte new String[3] statt new String[2] sein, da Sie speichern drei Einträge heißt Vorname, Mittelname und der Nachname. Hier

ist das richtige Programm:

class Substring { 
    public static void main (String[] args) throws java.lang.Exception { 
     Scanner user_input = new Scanner(System.in); 
     String[] NameSplit = new String[3]; 
     String FirstName; 
     String MiddleName; 
     String LastName; 

     System.out.println("Enter your full name (First Middle Last): "); 
     String fullname = user_input.nextLine(); 

     NameSplit = fullname.split(" "); 
     FirstName = NameSplit[0]; 
     MiddleName = NameSplit[1]; 
     LastName = NameSplit[2]; 

     System.out.println(fullname); 
     System.out.println(LastName+ ", "+ FirstName +" "+ MiddleName); 
     new StringBuilder(FirstName).reverse().toString(); 
     System.out.println(FirstName); 
    } 
} 

Ausgang:

Enter your full name (First Middle Last): John Mayer Smith

Smith, John Mayer

John

+0

Es ist String [2] als der erste Wert ist 0, zweite 1, dritte 2 :) Aber danke für die Hilfe trotzdem! –

+0

@ L.Jones28 Denken Sie daran, dass die Indizes von "0" ausgehen und während Sie die Leerzeichen reservieren, ist der Begriff der Indizes nicht mehr haltbar. Also sollte es "3" anstatt nur "2" sein. – user2004685

1

Split ist ein regulärer Ausdruck, können Sie ein oder mehrere Leerzeichen sucht („+‚) anstelle von nur einem Leerzeichen (‘“).

String[] array = s.split(" +"); 

Oder können Sie Strint Tokenizer

String message = "MY name is "; 
String delim = " \n\r\t,.;"; //insert here all delimitators 
StringTokenizer st = new StringTokenizer(message,delim); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 
0

java.util.Scanner bricht seine Eingabe in Token ein Trennzeichen Muster verwendet, die standardmäßig Leerzeichen entspricht. daher, auch wenn Sie "Elvis John Presley" eingegeben haben, wird nur "Elvis" in der fullName Variable gespeichert. können Sie BufferedReader verwenden volle Linie zu lesen:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    try { 
     fullname = reader.readLine(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

oder Sie können mit dem Standardverhalten des Scanners ändern: user_input.useDelimiter("\n"); Methode.

0

Die Ausnahme besagt eindeutig, dass Sie die Länge des Arrays überschreiten. Der Index 2 in LastName = NameSplit[2] liegt außerhalb der Grenzen des Arrays. Um loszuwerden des Fehlers müssen Sie:

1- ändern String[] NameSplit = new String[2] zu String[] NameSplit = new String[3], weil die Feldlänge 3 sein sollte.

Lesen Sie mehr hier: [How do I declare and initialize an array in Java?]

Bis der Fehler ist hier weg, aber die Lösung ist nicht korrekt noch da NameSplit[1] und NameSplit[2] ist null, weil user_input.next(); nur das erste Wort liest (* im Grunde, bis ein Leerzeichen (oder '\ n' wenn nur ein Wort erkannt wird). Also:

2- ändern user_input.next(); zu user_input.nextLine(); weil die nextLine() die gesamte Zeile liest (* im Grunde, bis ein '\ n' erkannt wird)

Lesen Sie mehr hier: [http://www.cs.utexas.edu/users/ndale/Scanner.html]

Verwandte Themen